网络编程杂谈之TCP协议

Java120

TCP协议属于网络分层中的传输层,传输层作用的就是建立端口与端口的通信,而其下一层网络层的主要作用是建立"主机到主机"的通信,所以在我们日常进行网络编程时只要确定主机和端口,就能实现程序之间的数据交流,在Unix系统中就把主机+端口,叫做"套接字"(socket),所以一般网络编程都是基于对于socket的操作来做的。

TCP协议其实是一个非常复杂的协议,做过网络编程开发的都听过一句话''TCP本身是一种可靠的协议",但正是为了保证可靠性,TCP 内部使用了如各种重传与控制算法,所以 TCP 是一个内部原理复杂,但是使用起来比较简单的协议。

下面我们对TCP协议进行一个基本的介绍,本文只是站在应用的角度上阐述,相比与真正的深入还是比较浅显的。

一、TCP协议格式

首先主要看下TCP协议的头格式

网络编程杂谈之TCP协议

其中各字段的意义如下:

1、TCP源端口(Source Port):16位的源端口其中包含发送方应用程序对应的端口。源端口和源IP地址标示报文发送端的地址。

2、TCP目的端口(Destination port):16位的目的端口域定义传输的目的。这个端口指明报文接收计算机上的应用程序地址接口。

3、包序号(Sequence Number):32位的SN序列号标识了TCP报文中第一个byte在对应方向的传输中对应的字节序号,用来记录网络包顺序,解决传输中的乱序、重复问题,比如发送端发送的一个TCP包净荷(不包含TCP头)为10byte,SN为5,则发送端接着发送的下一个数据包的时候,SN应该设置为5+10=15。通过序列号,TCP接收端可以识别出重复接收到的TCP包,从而丢弃重复包,同时对于乱序数据包也可以依靠系列号进行重排序,进而对高层提供有序的数据流。另外如果接收的包中包含SYN或FIN标志位,逻辑上也占用1个byte,应答号需加1。

输入验证码查看隐藏内容

扫描二维码关注本站微信公众号 Johngo学长
或者在微信里搜索 Johngo学长
回复 svip 获取验证码
wechat Johngo学长