端口号表示本计算机应用层中的各进程
端口号拼接到 IP 地址即构成套接字 Socket,唯一的表示网络中一台主机和其上的一个进程
面向连接服务:在通信双方进行通信之前,必须先建立连接,需要通信结束后释放这个连接
无连接服务:两个实体间的通信不需要先建立好连接
仅在 IP 的数据报服务上加了两个最基本的服务:
通常用于一次性传输较少数据的网络应用,如DNS, SNMP等。
UDP是面向报文的,报文不可分割,是UDP数据报处理的最小单位。因此,应用程序必须选择大小合适的报文

UDP数据报包含两部分:
传输层从 IP 层收到 UDP 数据报时,根据首部中的目的端口,把数据上交给对应的应用进程。如果发现不存在对应端口号的进程,就丢弃该报文。并由 ICMP 发送差错报文给发送方
在最前面增加 12 字节伪首部,把首部和数据部分一起校验
没看,感觉有点难呢
在不可靠的 IP 层上,实现的可靠的数据传输协议,主要解决传输的可靠,有序,无丢失和不重复问题
TCP 传送的数据单元称为报文段。报文段既可以用来运载数据,又能用来建立连接,释放连接和应答

分为首部和数据
首部:最短为 20B,后面有 4N 字节是根据需要而增加的选项,长度通常为 4B 的整数倍
源端口和目的端口号:各2B
序号:4B,范围是 0 − − − − 2 32 − 1 0----2^{32}-1 0−−−−232−1 。TCP传送时是逐个字节传送的,所以 TCP 连接传送的字节流中每个字节都按顺序编号。序号字段的值指的是本报文段所发送的数据的第一个字节的序号
确认号:4B,是期望收到对方下一个报文段的第一个数据字节的序号,若确认号为 N,则表明到序号 N-1 为止所有数据都已正确收到
数据偏移:4位,就是首部长度,数据偏移的单位是 4B,当此字段为 15时,达到TCP首部最大长度 60B
确认位ACK:ACK=1时,确认号字段才有效。ACK=0时,确认号字段无效。连接建立后,所有传送的报文段都必须把 ACK 置 1
同步位SYN:SYN=1表示这是一个连接请求 / 连接接受报文
窗口:2B,允许对方发送的数据量,因为接收方缓存窗口是有限的
校验和:2B,检验范围包括首部和数据。和UDP一样,校验时要加 12B 伪首部
选项:长度可变,最初只规定了一种选项,即最大报文段长度(MSS),是TCP报文段中数据字段的最大长度
数据:
TCP连接有三个阶段:连接建立,数据传送和连接释放。TCP把连接作为最基本的抽象
TCP连接的端口即为套接字或插口,每条TCP连接唯一地被通信的两个端点(套接字)确定
采用 客户 / 服务器形式
三次握手
服务器端资源在完成第二次握手时分配,客户端在完成第三次握手时分配。
就是:客户机说我想来,服务器说来吧,客户机就来了
就是:客户机说我没东西传了,服务器说那拜拜,服务器自己传自己的,然后没东西传了,客户机说那拜拜
首部的序号字段用来保证数据能有序提交给应用层
首部的确认号是期望收到对方的下一个报文段的数据的第一个字节的序号。
发送方缓存区会继续存储那些已发送但未收到确认的报文段,以在需要时重传
默认使用累计确认,只确认到第一个丢失字节为止的字节。比如收到了 0–2和6—7,但是此时的确认号是 3。(3是第一个丢失字节)
超时 和 冗余ACK 都重传
消除发送方使接收方缓存区溢出的可能性,是端到端的问题
基于滑动窗口协议
防止过多的数据注入网络,保证网络中的路由器或链路不过载,是网络的全局问题。
发送窗口的上限 = min[rwnd, cwnd]
流量控制中,发送方发送数据的量由接收方确定。在拥塞控制中,则由发送方自己通过检测网络状况来决定。
在 TCP 连接建立和网络出现超时时,采用慢开始和拥塞避免算法
当发送方接收到冗余 ACK 时,采用快重传和快恢复算法。