tcp基本概念
我们先看看tcp的头部里面有什么
image.png
源端口和目标端口这个顾名思义不用怎么解释。
序列号:是准备建立连接时候系统随机生成的一个号码,通过下面标志位的SYN,发送到接收方,每发送一次,累计增加一次发送的数据大小。目的是为了解决复杂的网络环境下的传输的乱序问题。
确认应答号:发送端收到确认应答号就可以确定之前的数据都被正常接收了。目的是为了解决不丢包的问题。
几个控制位:
ACK:这个置为1时,确认应答号有效,除非开始创建连接的时候发SYN,其余时间正常情况下这个都是1.
SYN: 这个置为1的时候,表示要建立连接,通过序列号字段的随机数值来初始化连接数据。
RST: 这个置为1的时候,表示tcp连接出现异常,要终止连接。
FIN: 这个置为1 的时候,表示数据收发ok了,准备要断开连接。
TCP位于传输层,主要就是为了提供可靠的传输,确保传输的数据包,按顺序,没有损坏,没有冗余。所以tcp是一个面向连接,可靠性保证的,基于字节流的传输层通讯协议。
每个tcp的确定是通过一个四元组
image.png
源地址和目标地址是在ip层,源端口是目标端口就是在tcp层,由这个四元组可以唯一确定一个tcp连接。地址确定什么主机,端口确定了主机上具体什么进程。
那么一个服务器的tcp端口一般可以建立多少个tcp连接?一个是受到文件描述符的限制,可以更改配置。另外一个是内存限制,每个tcp都会占一定的内存空间,每个连接之前测过,大概是几k,没有发送数据的情况。如果没有这些限制,ipv4 2的32次端口216次。ipv6直接就2的64次*端口了,这个理论极限几十年后感觉也不可能。
最后我们也来看看udp的头部,然后讲讲和tcp的区别
image.png
目标端口和源端口这个就不说了。包长度就是头部+数据长度之和。校验和就是为了提高可靠性的。
1.从连接上来看
tcp是面向连接的,所以传输之前要先建立连接,才传输数据。udp是无连接的。
2.服务对象
这点是第一点的延申,因为tcp有连接,所以只能1对1。因为udp无连接,所以可以一对一,也可以一对多。
3.可靠性
tcp保证可靠性,有序性,无冗余,udp不需要。
4.tcp有流量和拥塞控制,udp只管发就行。
5.tcp首部比较大,udp首部比较小。
6.tcp是字节流的发送,udp是按包一个个发送。