day9TCP三次握手四次握手

  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和UDP是互联网传输层的两种不同的通信协议。它们使用不同的端口号来进行通信TCP和UDP的端口号并不一样。TCP端口号被用于建立可靠的连接,而UDP端口号用于无连接的通信。具体的端口号可以根据具体的协议和服务来确定。可以查阅端口列表链接来获取TCP和UDP协议中常用的端口号。 举个例子,22号端口用于SSH服务,它用于建立通过网络登录远程计算机的安全连接。 当进行TCP数据包分析时,需要注意不要混淆客户端端口和服务器端口。客户端端口是递增的,通常从1024开始,到4096时再次循环。如果你要调查的端口号在这个范围的较低部分,那么它可能是一个客户端端口。有状态的防火墙可以识别服务器端口,但数据包嗅探器和无状态的防火墙则不行。要确定一个TCP数据包的具体协议和服务,需要检查初始的TCP握手过程。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [tcp/udp 常用端口列表](https://blog.csdn.net/whatday/article/details/106235441)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [常用网络端口号](https://blog.csdn.net/u011308691/article/details/16357477)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值