TCP建立连接三次握手

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

2. 服务器发出段2,也带有SYN,同时置ACK位表确认,确认序号是1001,我接收
到 序号1000及其以前所有的段,请你下次发送序号为1001的段”,也就是应答了客户端
的连接 请求,同时也给客户端发出个连接请求,同时声明最尺为1024
3. 客户端发出段3,对服务器的连接请求进应答,确认序号是8001
在这个过程中,客户端和服务器分别给对发了连接请求,也应答了对的连接请求,其中服务
器 的请求和应答在个段中发出,因此共有三个段于建连接,称为'''三握(three-wa
handshake)'''。在建连接的同时,双协商了些信息,例如双发送序号的初始值、最段
尺等。
TCP通讯中,如果收到另发来的段,读出其中的的端号,发现本机并没有任何进
程 使这个端,就会应答个包含RST位的段给另。例如,服务器并没有任何进程使
8080,我们却telnet客户端去连接它,服务器收到客户端发来的SYN段就会应答个RS
,客户 端的telnet程序收到RST段后报告错误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数据传输过程可以收发很多数据段,

虽然 典型的情景是客户端主动请求服务器被动应答,但也不是必须如此,事实上TCP协议为应

层提供 了全双(full-duplex)的服务,双都可以主动甚同时给对发送数据。

如果通讯过程只能采问答的式,收和发两个向不能同时传输,在同时间只允许

个 向的数据传输,则称为'''半双(half-duplex)''',假设某种向连接的协议是半双的,则只

需要 套序号就够了,不需要通讯双各维护套序号,想想为什么。

关闭连接的过程:

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

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

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

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

建立连接的过程是三次握手,关闭连接通常需要4个段,服务器的应答和关闭连接请求通常

不合 并在一个段中,因为有连接半关闭的情况,这种情况下客户端关闭连接之后就不能再发送

数据给服 务器了,但是服务器还可以发送数据给客户端,直到服务器也关闭连接为止

三次握手的目的:

  1. 数据必须正确到达

2.数据必须按序到达

3.数据丢失后进行数据重传

4.大面积丢包,网络拥塞,TCP慢点发送请求

5.传输速度也应该控制

每次建立连接时,会有相应的数据结构来描述这个链接

数据结构中的内容:

  1. 双方的套接字

  2. 这条连接的序号

  3. 滑动窗口