TCP/IP协议相关概念
TCP/IP协议分为四层:应用层、传输层、网络层、链路层
TCP/IP协议基本框架
当通过http发起一个请求时,应用层、传输层、网络层和链路层的相关协议依次对该请求进行包装并携带对应的首部,最终在链路层生成以太网数据包,以太网数据包通过物理介质传输给对方主机,对方接收到数据包以后,然后再一层一层采用对应的协议进行拆包,最后把应用层数据交给应用程序处理。
1、链路层
以太网规定一组电信号就是一个数据包,一个数据包被称为一帧, 制定这个规则的协议就是以太网协议。
一个完整的以太网数据包如图所示:
首部:14个字节,包含目标MAC地址、源MAC地址(每个网卡有不同的MAC地址,且全球唯一)和类型(IPV4——0x0800;IPV6——0x86DD))
数据:46-1500个字节,大于1500字节需分割多帧
尾部:4个字节,数据校验序列
有了MAC地址以后,以太网采用广播形式,把数据包发给该子网内所有主机,子网内每台主机在接收到这个包以后,都会读取首部里的目标MAC地址,然后和自己的MAC地址进行对比,如果相同就做下一步处理,如果不同,就丢弃这个包。
链路层的主要工作:对电信号进行分组并形成具有特定意义的数据帧,然后以广播的形式通过物理介质发送给接收方。
2、网络层
IP协议:
可以通过IP地址可以判断两台主机是否属于同一网络;如果两个IP地址在同一个子网内,则网络地址一定相同。为了判断IP地址中的网络地址,IP协议还引入了子网掩码, IP地址和子网掩码通过按位与运算后就可以得到网络地址。
ARP协议:
IP地址获取MAC地址:包含目标IP—>生成以太网数据包—>广播给子网所有主机——>主机取出IP地址——>对比自己IP地址——>相同返回MAC/不同则丢弃——>ARP收到返回消息确认MAC地址。
路由协议:
ARP协议的MAC寻址局限:要求客户端与主机在同一子网内。
路由协议:IP协议判断是否是同一子网—>(是:ARP协议找MAC)以太网将数据包通过网关进行路由—>目标IP所在子网—>ARP协议找MAC
(注:网关是互联网上子网与子网之间的桥梁,所以网关会进行多次转发,最终将该数据包转发到目标IP所在的子网中,完成这个路由协议的物理设备就是路由器,在错综复杂的网络世界里,路由器扮演者交通枢纽的角色,它会根据信道情况,选择并设定路由,以最佳路径来转发数据包。)
IP数据包格式:
首部:20个字节,包含目标IP地址和源IP地址
数据:65515个字节,大于1500字节需分割多帧
网络层的主要工作:定义网络地址,区分网段,子网内MAC寻址,对于不同子网的数据包进行路由。
3、传输层
UDP协议:
为了给每个应用程序标识身份,UDP协议定义了端口,同一个主机上的每个应用程序都需要指定唯一的端口号,并且规定网络中传输的数据包必须加上端口信息。 这样,当数据包到达主机以后,就可以根据端口号找到对应的应用程序了。UDP定义的数据包就叫做UDP数据包,结构如下所示:
首部:8个字节,主要包括源端口和目标端口
数据:最大长度65527个字节
TCP协议(三次握手/四次挥手):
三次握手:
四次挥手:
(1)UDP协议比较简单,实现容易,但它没有确认机制, 数据包一旦发出,无法知道对方是否收到,因此可靠性较差。
(2)TCP即传输控制协议,是一种面向连接的、可靠的、基于字节流的通信协议。简单来说TCP就是有确认机制的UDP协议,每发出一个数据包都要求确认,如果有一个数据包丢失,就收不到确认,发送方就必须重发这个数据包。
传输层的主要工作:定义端口,标识应用程序身份,实现端口到端口的通信,TCP协议可以保证数据传输的可靠性。
链路层定义了主机的身份,即MAC地址
网络层定义了IP地址,明确了主机所在的网段
传输层定义了应用程序的端口,实现端口到端口的通信
4、应用层
字节流<—>规范数据格式
HTTP有两类报文:请求报文和响应报文
请求报文:
1、请求行(request line)
2、请求头部(header)
3、空行
4、请求数据
响应报文:
1、状态行
2、消息报头
3、响应正文