计算机网络模型(二):应用层
简介
运输层其实很简单,就两个协议需要我们特别关心,一个是TCP协议,几乎所有的应用层协议都是基于TCP协议的;另一个就是UDP协议,也很重要。一般二者用在不同的场合。
想一下,两台网络主机要想通信,应该怎么办?
运输层提供了解决方法:
- TCP:建立虚拟链路,消息从这个链路传过去。
- UDP:构造一个消息包,里面有目的地,每个主机看到这个包就传给下一个离目的主机更近的主机,直到最终主机收到。
TCP
TCP协议就好比火车,乘客就是要传递的信息。火车从上海到北京,路线固定,你不会中途走错路。但是呢,至于火车应该怎么走,那就是很复杂的问题了。
TCP报文格式
简单分析一下报文,下面的序号是按行号来的:
- 源端口:占16位,2字节,定义了TCP报文(考点,一会说)是从哪个端口传来的。记住是端口不是地址。目的端口:占16位,2字节。
- 序号:占32位,4字节,是TCP滑动窗口(考点,一会说)的基础。
- 确认号:占32位,4字节,是可靠性保障的基础(考点,一会说)。
- 这个比较多,我分条:
- 数据偏移:占4位,是指真正的数据到报文头部的距离。但是,4位最多能标识16个数字,而TCP报文头是以4个字节长度为单位的(看图最上部单位),因此16*4=64字节。这就规范了TCP报文头部最多为64字节;
- 保留位:目前置0,待日后使用;
- URG:紧急报文(说实话我没用过也没见用过);
- ACK:确认ACK,只有ACK=1才有效,ACK=0的报文段丢弃;
- PSH:推送,该字段置1以后,不经过缓存直接交付(否则为了效率会用缓存先接收);
- RST:重置位,当TCP连接出现严重差错,如主机崩溃,会置1,强制断开连接。
- SYN:SYN=1,就说明这是申请连接或者接受连接的报文。
- FIN:FIN=1,说明发送方数据已经发送完毕,要求释放连接。
- 窗口:16位,2字节。告诉发送方,接收方最多能一次性接受多少数据量(一会说)
- 校验和:就是通过对首部与正文进行校验判断报文是否被篡改;紧急指针:仅在URG=1的时候有效,指明了紧急数据在报文的位置,之后都是普通报文。
- 选项:这部分就是可填充数据,但是全部报文头部不能超过64字节。
TCP三次握手
见文章: