精华内容
下载资源
问答
  • Tcp三次握手过程 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源。Client端接收到ACK...

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    Tcp三次握手过程

    TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:

    在这里插入图片描述

    Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源。Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了。

    第一次握手:主机A发送位码为 syn=1,随机产生seq number=1234567的数据包到服务器,主机B由syn=1知道,A要求建立联机;
    第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包
    第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。
    完成三次握手,主机A与主机B开始传送数据。

    在这里插入图片描述

    常见面试题:
    【问题1】为什么连接的时候是三次握手,关闭的时候却是四次握手?
    答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,“你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

    【问题2】为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
    答:虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。

    为什么不能用两次握手进行连接?
    答:3次握手完成两个重要的功能,既要双方做好发送数据的准备工作(双方都知道彼此已准备好),也要允许双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认。
    现在把三次握手改成仅需要两次握手,死锁是可能发生的。作为例子,考虑计算机S和C之间的通信,假定C给S发送一个连接请求分组,S收到了这个分组,并发 送了确认应答分组。按照两次握手的协定,S认为连接已经成功地建立了,可以开始发送数据分组。可是,C在S的应答分组在传输中被丢失的情况下,将不知道S 是否已准备好,不知道S建立什么样的序列号,C甚至怀疑S是否收到自己的连接请求分组。在这种情况下,C认为连接还未建立成功,将忽略S发来的任何数据分 组,只等待连接确认应答分组。而S在发出的分组超时后,重复发送同样的分组。这样就形成了死锁。

    【问题4】如果已经建立了连接,但是客户端突然出现故障了怎么办?
    TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75分钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。

    展开全文
  • 首先先简单介绍一下tcp包首部的6个标志位,SYN是同步序号,用于发起一...下面详细介绍一下tcp连接时发的三次握手和关闭连接时的四次握手三次握手:  1次: 客户端调用connect进行主动打开,这将发送一个SYN段

    首先先简单介绍一下tcp包首部的6个标志位,SYN是同步序号,用于发起一个tcp连接,FIN标志发送方完成数据收发,ACK标志确认序号,RST标志复位连接,PSH标志尽可能快的将数据送往接手程序,URG紧急指针标志。


    下面详细介绍一下tcp连接时发的三次握手和关闭连接时的四次握手。


    三次握手:

            1次: 客户端调用connect进行主动打开,这将发送一个SYN段用于指明客户端打算连接的服务器端口以及初始序号。

    2次:服务器发回一个ACK段进行确认,包含服务器初始序号的SYN报文段作为应答,同时,将确认序号设置为客户的初始序号加1以对客户的SYN报文段进行确认。确认序号是发送这个ACK的一端所期待的下一个序号。

    3次:客户端必须将确认序号设置为服务器的初始序号加1 以对SYN报文段进行确认。


    四次握手:

    1次:某个应用程序首先调用close执行主动关闭,该端的tcp将发送一个FIN分节,表示数据发送完毕。

    2次:接收到这个FIN的对端执行被动关闭。这个FIN由tcp进行确认,并发送一个确认的ACk包。接收到FIN的一端将在套接字上收到一个文件结束符,表示接收端在这个连接上已无数据可收。

    3次:一段时间后,接收进程将调用close关闭套接字,这导致接收进程也发送一个FIN。

    4次:原发送端(执行主动关闭的那一端)确认这个FIN。

    展开全文
  • TCP三次握手四次挥手过程
    展开全文
  • 为什么会有TCP三次握手 IP:网络层不稳定,硬件联系紧密,一旦路由器出现问题数据不能到达, 传输层 对不稳定的网络层完全不弥补–>UDP—无连接不可靠报文传输;...包含大家熟知的三次握手四次握手。 SYN标志位
    1. 为什么会有TCP三次握手
      IP:网络层不稳定,硬件联系紧密,一旦路由器出现问题数据不能到达,
      传输层
      1. 对不稳定的网络层完全不弥补–>UDP—无连接不可靠报文传输;
      2. 对不稳定的网络层完全弥补–>TCP—面向连接的可靠数据包传递。 在发数据之前先建立通路。—建立连接的过程就是三次握手

    TCP通信时序

    下图是一次TCP通讯的时序图。TCP连接建立断开。包含大家熟知的三次握手和四次握手。

    1. SYN标志位–>建立连接标志位
    2. ACK标志位–>应答连接的标志位
    3. FIN标志位–>关闭连接的标志位
      这里写图片描述

    这里写图片描述
      在这个例子中,首先客户端主动发起连接、发送请求,然后服务器端响应请求,然后客户端主动关闭连接。两条竖线表示通讯的两端,从上到下表示时间的先后顺序,注意,数据从一端传到网络的另一端也需要时间,所以图中的箭头都是斜的。双方发送的段按时间顺序编号为1-10,各段中的主要信息在箭头上标出,例如段2的箭头上标着SYN, 8000(0), ACK1001, ,表示该段中的SYN位置1,32位序号是8000,该段不携带有效载荷(数据字节数为0),ACK位置1,32位确认序号是1001,带有一个mss(Maximum Segment Size,最大报文长度)选项值为1024。
      


    建立连接(三次握手)的过程:

    1.   客户端发送一个带SYN标志的TCP报文到服务器。这是三次握手过程中的段1。客户端发出段1,SYN位表示连接请求。序号是1000,这个序号在网络通讯中用作临时的地址,每发一个数据字节,这个序号要加1,这样在接收端可以根据序号排出数据包的正确顺序,也可以发现丢包的情况,另外,规定SYN位和FIN位也要占一个序号,这次虽然没发数据,但是由于发了SYN位,因此下次再发送应该用序号1001。mss表示最大段尺寸,如果一个段太大,封装成帧后超过了链路层的最大帧长度,就必须在IP层分片,为了避免这种情况,客户端声明自己的最大段尺寸,建议服务器端发来的段不要超过这个长度。
    2.   服务器端回应客户端,是三次握手中的第2个报文段,同时带ACK标志和SYN标志。它表示对刚才客户端SYN的回应;同时又发送SYN给客户端,询问客户端是否准备好进行数据通讯。
      服务器发出段2,也带有SYN位,同时置ACK位表示确认,确认序号是1001,表示“我接收到序号1000及其以前所有的段,请你下次发送序号为1001的段”,也就是应答了客户端的连接请求,同时也给客户端发出一个连接请求,同时声明最大尺寸为1024。
    3.   客户必须再次回应服务器端一个ACK报文,这是报文段3。客户端发出段3,对服务器的连接请求进行应答,确认序号是8001。在这个过程中,客户端和服务器分别给对方发了连接请求,也应答了对方的连接请求,其中服务器的请求和应答在一个段中发出,因此一共有三个段用于建立连接,称为“三方握手(three-way-handshake)”。在建立连接的同时,双方协商了一些信息,例如双方发送序号的初始值、最大段尺寸等。在TCP通讯中,如果一方收到另一方发来的段,读出其中的目的端口号,发现本机并没有任何进程使用这个端口,就会应答一个包含RST位的段给另一方。例如,服务器并没有任何进程使用8080端口,我们却用telnet客户端去连接它,服务器收到客户端发来的SYN段就会应答一个RST段,客户端的telnet程序收到RST段后报告错误Connection refused:
      $ telnet 192.168.0.200 8080
      Trying 192.168.0.200…
      telnet: Unable to connect to remote host: Connection refused

    数据传输的过程:

    1. 客户端发出段4,包含从序号1001开始的20个字节数据。
    2. 服务器发出段5,确认序号为1021,对序号为1001-1020的数据表示确认收到,同时请求发送序号1021开始的数据,服务器在应答的同时也向客户端发送从序号8001开始的10个字节数据,这称为piggyback。
    3. 客户端发出段6,对服务器发来的序号为8001-8010的数据表示确认收到,请求发送序号8011开始的数据。
      在数据传输过程中,ACK和确认序号是非常重要的,应用程序交给TCP协议发送的数据会暂存在TCP层的发送缓冲区中,发出数据包给对方之后,只有收到对方应答的ACK段才知道该数据包确实发到了对方,可以从发送缓冲区中释放掉了,如果因为网络故障丢失了数据包或者丢失了对方发回的ACK段,经过等待超时后TCP协议自动将发送缓冲区中的数据包重发。

    关闭连接(四次握手)的过程:

    这里写图片描述
      由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
        1.客户端发出段7,FIN位表示关闭连接的请求。
        2.服务器发出段8,应答客户端的关闭连接请求。
        3.服务器发出段9,其中也包含FIN位,向客户端发送关闭连接请求。
        4.客户端发出段10,应答服务器的关闭连接请求。
      建立连接的过程是三方握手,而关闭连接通常需要4个段,服务器的应答和关闭连接请求通常不合并在一个段中,因为有连接半关闭的情况,这种情况下客户端关闭连接之后就不能再发送数据给服务器了,但是服务器还可以发送数据给客户端,直到服务器也关闭连接为止。
      1. 为什么tcp建立连接是三次握手,而关闭连接时四次握手?
      因为linux操作系统允许TCP采用半关闭的状态,所以两次关闭就要四次握手。
      有关半关闭状态的相关内容见
      http://blog.csdn.net/gjggj/article/details/73740408

    展开全文
  • 建立TCP需要三次握手才能建立,而断开连接则需要四次握手。整个过程如下图所示: 先来看看如何建立连接的。 首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源。...
  • 首先,是需要明白一些字段的含义,这样三次握手四次握手的流程图就立马可以很轻松地理解,并迅速手绘了。 (至于这两个流程图,网上铺天盖地都是,这里就不贴出来了。) SYN:该字段被设置为1(即true),表示...
  • 面试官,不要再问我三次握手四次挥手

    万次阅读 多人点赞 2019-10-08 09:55:58
    三次握手四次挥手是各个公司常见的考点,也具有一定的水平区分度,也被一些面试官作为热身题。很多小伙伴说这个问题刚开始回答的挺好,但是后面越回答越冒冷汗,最后就歇菜了。 见过比较典型的面试场景是这样的: ...
  • http,全称Hyper Text ... 三次握手为: 1.客户端发送连接请求,即SYN seq=x。 2.服务端接收客户端的连接请求,并且同样发送连接请求(SYN seq=y)和返回客户端请求的同意连接(ask=x+1)。 3.客户端接收服务端...
  • int listen(int sockfd, int backlog); int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
  • TCP三次握手其实就是TCP连接建立的过程,三次握手的目的是同步连接双方的序列号和确认号并交换TCP窗口大小信息 。下面是TCP三次握手的流程图: 整个流程为: 客户端主动打开,发送连接请求报文段,将SYN...
  • TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset...
  • 4、socket中TCP的三次握手建立连接详解 5、socket中TCP的四次握手释放连接详解 6、一个例子(实践一下) 7、留下一个问题,欢迎大家回帖回答!!! 1、网络中进程之间如何通信? 本地的...
  • TCP协议三次握手四次握手机制-动画详解

    万次阅读 多人点赞 2018-08-25 20:19:44
    TCP三次握手四次挥手的问题在面试中是最为常见的考点之一。很多读者都知道三次和四次,但是如果问深入一点,他们往往都无法作出准确回答。 本篇尝试使用动画来对这个知识点进行讲解,期望读者们可以更加简单地地...
  • 三次握手,四次挥手,为什么是三次握手四次挥手 四次挥手 TCP的连接的拆除需要发送四个包,因此称为四次挥手。客户端或服务器均可主动发起挥手动作。 由于TCP连接时全双工的,因此每个方向都必须单独进行关闭...
  • 三次握手3.四次挥手4.参考文章 1.前言 网络通信的实体是不同主机之间进程的通信,也就是端到端通信,其过程借助于TCP或者UDP协议,基于端口。 倘若利用TCP协议,则传输前有三次握手,传输后有三次挥手,是一个可靠...
  • 三次握手四次握手

    2019-10-11 11:23:38
    三次握手与四次握手三次握手四次握手 三次握手是TCP建立连接的协议,四次握手是关闭连接的协议 三次握手 为什么3次?有什么作用?是为了建立TCP连接,需要三次握手才能确定对方的接收能力和发送能力都没有问题,指定...
  • TCP的三次握手四次挥手理解及面试题(很全面)

    万次阅读 多人点赞 2018-07-17 20:56:17
    【问题1】为什么连接的时候是三次握手,关闭的时候却是四次握手? 答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接...
  • 两张动图-彻底明白TCP的三次握手四次挥手

    万次阅读 多人点赞 2017-06-04 21:53:54
    为什么建立连接是三次握手,关闭连接确是四次挥手呢? 建立连接的时候, 服务器在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。 而关闭连接时,服务器收到对方的FIN报文时,...
  • 计算机网络—三次握手/四次握手

    千次阅读 2017-12-25 16:44:24
    计算机网络基础 三次握手 四次握手
  • 在面试中,三次握手四次挥手可以说是问的最频繁的一个知识点了,我相信大家也都看过很多关于三次握手四次挥手的文章,今天的这篇文章,重点是围绕着面试,我们应该掌握哪些比较重要的点,哪些是比较被面试官给问...
  • HTTP 三次握手,四次挥手(为什么是三次握手四次挥手) 问题带入 --- 个人阅读别人的笔记自己的理解 -- 具体底层有待以后提升后补充完成 1.HTTP请求 为什么是三次握手四次挥手? 2.为什么是三次握手不是两次握手?...
  • TCP连接换成四次握手行不行?为什么?换成两次握手行不行?为什么? 这是我面试时遇到的原题   首先来说一下三次握手,为什么需要三次握手呢?因为TCP提供的是可靠传输服务,因此它在传输之前必须要进行传输的可靠...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,045
精华内容 6,418
关键字:

三次握手四次握手