poYBAGL-47-ASoraAAC7gAUfL1M514.png

TCP介绍

传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。

TCP是为了在不可靠的互联网络上提供可靠的端到端字节流而专门设计的一个传输协议。

当应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,TCP则把数据流分割成适当长度的报文段,最大传输段大小(MSS)通常受该计算机连接的网络的数据链路层的最大传送单元(MTU)限制。之后TCP把数据包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。

TCP为了保证报文传输的可靠,就

给每个包一个序号

,同时序号也保证了传送到接收端实体的包的

按序接收

。然后接收端实体对已成功收到的字节发回一个相应的

确认(ACK)

;如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传(超时重传)。

TCP工作过程

poYBAGL-4p6ATcBxAAC3qa_tyN0088.png

首先,我们可以很明显从图中看出,tcp工作需要分两个主体,一个客户端,一个服务器。我用超级大白话来帮助理解:①tcp服务器

买部手机

插上电话卡

设置手机为正常的接听状态

等待他人来电

②在程序中的

创建socket套接字

绑定本机地址信息

设置套接字为被动连接

等待客户端的连接

收发数据

pYYBAGL-4tmAQ8JzAAEZ6AbARv0604.pngpYYBAGL-4t-AKGQqAACYOyTjKB0120.png

我们先运行这个程序,然后打开网络调试助手进行连接:

pYYBAGL-4weAP_RsAAE_nvvRYrc561.pngpYYBAGL-4w2AO5XmAABs8HlCsFU573.png

然后我们在服务器端口发送消息至客户端:

poYBAGL-4zKAWfuxAABvTLIZHQM823.pngpoYBAGL-4zeAe-6JAAGzibGlRos066.png

当然,我们也可以脱离网络调试助手,我们自己协议简易客户端程序:

pYYBAGL-40qAErJlAACk1VyGk0g617.png

同样地,手机要先开机才能接电话,所以先运行服务器,再运行客户端:

poYBAGL-416AaU3BAAB4OjCTWyY120.png

切换到服务器:

poYBAGL-43yAdeQeAACeGV1gQBk463.png

回到客户端:

pYYBAGL-45OAOQN5AACwjcJb8yg514.png

同样也是非常简单,客户端的写法只需要发送建立连接即可,也就是通过connect方法拨通电话。

当然,你也可以选择加入循环语句进行循环收发,但想要达到聊天软件那种收发无规律的效果,还是需要并发编程(后面我也会出的)。

TCP工作方式(原理)

poYBAGL-47-ASoraAAC7gAUfL1M514.png

一、三次握手

TCP是因特网中的传输层协议,使用

三次握手协议

建立连接。当主动方发出SYN连接请求后,等待对方回答SYN+ACK,并最终对对方的 SYN 执行 ACK 确认。这种建立连接的方法可以防止产生错误的连接。

术语:

SYN:同步位,SYN=1,表示进行一个连接请求;

ACK:确认位,ACK=1,确认有效,ACK=0,确认无效;

seq:序号;

FIN:断开连接并且会停止发送数据。

poYBAGL-49aABD0VAACXJCTY9vM439.png

TCP三次握手的过程如下:

1. 客户端发送SYN(SEQ=x)报文给服务器端,进入SYN_SEND状态。

2. 服务器端收到SYN报文,回应一个SYN (SEQ=y)ACK(ACK=x+1)报文,进入SYN_RECV状态。

3. 客户端收到服务器端的SYN报文,回应一个ACK(ACK=y+1)报文,进入Established状态。

三次握手完成,TCP客户端和服务器端成功地建立连接,可以开始传输数据了。

形象点就是:

客户端说:服务器我要连接你了,你同意吗?

服务器说:我同意。客户端,我要连接你了,你同意吗?

客户端说:我也同意。

TCP三次握手的原因:

防止已失效的连接请求又传送到服务器端,因而产生错误。三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已经收到了序列号起始值的必经步骤。如果只是两次握手, 至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认。

二、四次挥手

poYBAGL-4-yASUQUAACo5ywKfb4151.png

形象点就是:

客户端说:服务器,我要断开你了!

服务器说:好的!让我传完数据!

数据传输结束后

服务器说:客户端,我要断开你了!

客户端说:好的!

这就表现出了四次挥手,和三次握手不同的是,结束的时候,可能仍然有数据在进行传输,tcp为了保证数据传输的完整性,断开连接会在数据传输结束之后再进行,因此这里也体现出一次挥手。

TCP简易聊天器(局域网)

poYBAGL-5A6ABRLhAADSh34PCso757.pngpYYBAGL-5BOAYwQ7AACneQErvLE782.png

仍然是先服务端再客户端。

Loading

发表回复