tcp的三次握手四次挥手

wKioL1fnIvTyo1TfAAFB0fMhi1k831.png-wh_50

在这个例子中,首先客户端主动发起链接、发送请求,而后服务器端响应请求,而后客户端主动 关 闭链接。两条竖线表示通信的两端,从上到下表示时间的前后顺序,注意,数据从一端传到 网络的 另外一端也须要时间,因此图中的箭头都是斜的。双方发送的段按时间顺序编号为1-10, 各段中的主 要信息在箭头上标出,例如段2的箭头上标着SYN, 8000(0), ACK 1001, <mss 1024>, 表示该段中 的SYN位置1,32位序号是8000,该段不携带有效载荷(数据字节数为0),ACK位置 1,32位确认 序号是1001,带有一个mss选项值为1024。  服务器

创建链接的过程:   网络

1.客户端发出段1,SYN位表示链接请求。序号是1000,这个序号在网络通信中用做临时的地址,每发一个数据字节,这个序号要加1,这样在接收端能够根据序号排出数据包的正 确顺 序,也能够发现丢包的状况,另外,规定SYN位和FIN位也要占个序号,此次虽然没 发数 据,可是因为发了SYN位,所以下次再发送应该用序号1001。mss表示最大段尺寸, 若是个段太大,封装成帧后超过了链路层的最大帧长度,就必须在IP 层分片,为了避 免这种情 况,客户端声明本身的最大段尺寸,建议服务器端发来的段不要超过这个长度。 ide

2.服务器发出段2,也带有SYN位,同时置ACK位表示确认,确认序号是1001,表示“我接收到序号1000及其之前全部的段,请你下次发送序号为1001的段”,也就是应答了客户端 的链接 请求,同时也给客户端发出个链接请求,同时声明最大尺寸为1024。 spa

3.客户端发出段3,对服务器的链接请求进行应答,确认序号是8001。在这个过程当中,客户端和服务器分别给对方发了链接请求,也应答了对方的链接请求,其中服务 器 的请求和应答在个段中发出,所以共有三个段用于创建链接,称为'''三握(three-way-  handshake)'''。在创建链接的同时,双方协商了些信息,例如双方发送序号的初始值、最大段 尺寸等。  在TCP通信中,若是一方收到另外一方发来的段,读出其中的目的端口号,发现本机并无任何进 程 使用这个端口,就会应答一个包含RST位的段给另外一方。例如,服务器并无任何进程使用 8080端 口,咱们却用telnet客户端去链接它,服务器收到客户端发来的SYN段就会应答一个RST 段,客户 端的telnet程序收到RST段后报告错误Connection refused:  blog

数据传输的过程:   three

  1. 客户端发出段4,包含从序号1001开始的20个字节数据.进程

  2. 服务器发出段5,确认序号为1021,对序号为1001-1020的数据表示确认收到,同时请求发 送 序号1021开始的数据,服务器在应答的同时也向客户端发送从序号8001开始的10个 字节数 据,这称为piggyback 。  ci

  3. 客户端发出段6,对服务器发来的序号为8001-8010的数据表示确认收到,请求发送序号 8011开始的数据。在数据传输过程当中,ACK和确认序号是很是重要的,应用程序交给TCP协议发送的数据会暂存 在TCP层的发送缓冲区中,发出数据包给对方以后,只有收到对方应答的ACK段才知道该数据 包确 实发到了对方,能够从发送缓冲区中释放掉了,若是由于网络故障丢失了数据包或者丢失 了对方发 回的ACK段,通过等待超时后TCP协议自动将发送缓冲区中的数据包重发。  get

这个例子只描述了最简单的一问一答的情景,实际的TCP数据传输过程能够收发不少数据段, 虽然 典型的情景是客户端主动请求服务器被动应答,但也不是必须如此,事实上TCP协议为应 用层提供 了全双工(full-duplex)的服务,双方均可以主动甚至同时给对方发送数据。  若是通信过程只能采用一问一答的方式,收和发两个方向不能同时传输,在同一时间只容许一 个方 向的数据传输,则称为'''半双工(half-duplex)''',假设某种面向链接的协议是半双工的,则只 须要 一套序号就够了,不须要通信双方各自维护一套序号,想想为何。  it

关闭链接的过程: 

  1. 客户端发出段7,FIN位表示关闭链接的请求。

  2. 服务器发出段8,应答客户端的关闭链接请求。

  3. 服务器发出段9,其中也包含FIN位,向客户端发送关闭链接请求。  

  4. 客户端发出段10,应答服务器的关闭链接请求。  

  创建链接的过程是三方握手,而关闭链接一般须要4个段,服务器的应答和关闭链接请求一般 不合 并在一个段中,由于有链接半关闭的状况,这种状况下客户端关闭链接以后就不能再发送 数据给服 务器了,可是服务器还能够发送数据给客户端,直到服务器也关闭链接为止,稍后会 看到这样的例 子。