目录
一、什么是端口号?
二、TCP协议
2.1 TCP报文格式
2.2 三次握手
2.3 四次挥手
2.4 窗口流量控制
三、UDP协议
3.1 UDP报文格式
3.4 传输过程
一、什么是端口号?
我们自己的一台电脑上有时可能会同时运行多个进程软件来进行上网。那么当网络上的服务器响应我们电脑进程的请求并回复数据包发给我们电脑时,我们电脑从网卡中收到数据帧后,应该将数据包交给电脑中那个正在运行的进程软件进行处理呢? 此时端口号就派上用场了,端口号的作用就是用来区分主机上正在运行的不同服务软件,这也就是为什么网络服务端与客户端的通信数据帧在运输层都会包含一个源目端口号的原因,就是为了方便目地主机知道要将收到的数据包交给上层的那个正在运行的服务进行处理。
端口号范围:1-65535
1~1024称为知名端口号或固定端口号,这些端口号默认被永久分配给某个应用使用。如 80端口代表http、 telnet为23端口、 ssh为22端口、ftp为20/21号端口等。
1024以上的端口号被称为高位端口号或随机端口号,一般供用户自定义分配服务程序使用。
二、TCP协议
2.1 TCP报文格式
Seq:序列号------每发一个报文就会产生一个的序列号---1.2.3...6...
Ack: 对序列号确认----表明我收到了此个报文
HL:头部长度
SYN:请求建立连接
FIN : 请求断开连接
RST: 请求重新建立连接
ACK:确认、对标识位的确认
windows: 窗口,流量
2.2 三次握手
TCP建立连接:向对方发送数据前先给对方打声招呼,协商下通信参数、看双方通信链路是否稳定。
主机A: 10.11.12.13 ….
主机B: 100.101.102….
主机A和主机B要建立TCP连接
ack表示对方的确认,大ACK表示同意请求,小ack表示对对方包的确认收到。
1.主机A发送TCP连接 ---SYN=1 (请求建立连接) seq=10 (包序列标号)
2.主机B同意主机A与其建立连接 ACK=1 ack=11(表示收到了主机A的报文、可以发送下一个11报文了)、同时由于数据传输是双向的,此时主机B也需要与主机A建立连接请求。SYN=1 seq=100。所以综合起来报文包含ACK=1 ack=11, SYN=1 seq=100。
3.主机A收到主机B的请求建立连接、同意与其建立连接。ACK=1(同意) ack=101(表示收到主机B的请求报文了、主机B可以发送下个101报文给我了) seq=11(表示主机A发送的第二个报文)。综合起来报文包含ACK=1 ack=101 seq=11。
2.3 四次挥手
TCP关闭连接
场景:主机A数据传输完毕,但服务器向主机A响应的数据并没有发送完毕。
1.主机A数据传输完毕 FIN=1(请求断开连接)seq表示此次发送的是第几个包 ack 表示对服务器上次发来的包的确认。
2.服务器同意主机A向自身发送流量的方向断开连接 ACK=1
以上过程、主机A就完成了断开连接,无法再向服务器发送连接,以下过程结束双向连接断开,会话结束。
3.过了一会服务器向主机A发送流量结束,请求断开连接 FIN=1 seq表示现在发送的是第几个数据包 ack表示对主机A上次发送给自己的一波报文流量的确认。
4.主机A同意服务器与自己断开连接 ACK=1。
2.4 窗口流量控制
window窗口字段用于标识本机缓存区的大小 。缓存区有多大就表明自身可以储存多少流量以及每次可以发送多少流量出去。通过丢包确认机制互相协调,彼此之间缓存区的大小,来调整彼此之间每次可以接收和发送多少流量。
三、UDP协议
3.1 UDP报文格式
在向目的主机发送数据信息时,不需要给对方事先打招呼就直接将数据帧发送给目的主机。同时数据包在传输过程中有丢失就丢失了,源主机并不会在重新发送一份给目的主机。这样以来由于通信双发不需要事先发送数据报文建立连接、协商参数、也没有丢包重传机制,所以使用UDP进行通讯传输处理效率会很高,但无法保证通信的可靠性,因此对时延比较敏感的数据,一般选择UDP。如:语音、视频。
3.4 传输过程
由于UDP协议没提供数据确认重传机制,因此只能由使用UDP协议的主机上的应用程序来提供报文的确认、排序、流控等操作。
@声明:“山月润无声”博主知识水平有限,以上文章如有不妥之处,欢迎广大IT爱好者指正,小弟定当虚心受教!