# 十一.tcp
# 1.TCP/IP 模型
TCP/IP 协议模型,包含了一系列构成互联网基础的网络协议,是 Internet 的核心协议。
基于 TCP/IP 的参考模型将协议分成四个层次,它们分别是链路层、网络层、传输层和应用层。
TCP/IP 协议按照层次由上到下,层层包装。最上面的是应用层,这里有 http,ftp 等待我们熟悉的协议。而第二层则是传输层,著名的 TCP 和 UDP 协议就是在这个层次。第三层是网络层,IP 协议就在这里,它负责对数据加上 IP 地址和其他的数据以确定传输的目标。第四层是数据链路层,这个层次为待传送的数据加入一个以太网协议头,进行 CRC 编码,为最后的数据传输做准备。
上图清楚地表示了 TCP/IP 协议中每个层的作用,而 TCP/IP 协议通信的过程其实就对应着数据入栈与出栈的过程。入栈的过程,数据发送方每层不断地封装首部与尾部,添加一些传输的信息,确保能传输到目的地。出栈的过程,数据接收方每层不断地拆除首部与尾部,得到最终传输的数据。
# 2.数据链路层
物理层负责 0、1 比特流与物理设备电压高低、光的闪灭之间的交换。数据链路层负责将 0、1 序列划分为数据帧从一个节点传输到临近的另一个节点,这些节点是通过 MAC 来唯一标识的(MAC,物理地址,一个主机会有一个 MAC 地址)
- 封装成帧:把网络层数据报加头和尾,封装成帧,帧头中包括源 MAC 地址和目的 MAC 地址。
- 透明传输:零比特填充、转义字符。
- 可靠传输:在出错率很低的链路上很少用,但是无线链路 WLAN 会保证可靠传输。
- 差错检测:接受者检测错误,如果发现错误,丢弃该帧。
# 3.网路层
# 1.IP 协议
IP 协议是 TCP/IP 协议的核心,所有 TCP、UDP、IMCP、IGMP 的数据都以 IP 数据格式传输。要注意的是,IP 不是可靠的协议,这是说,IP 协议没有提供一种数据未传达以后的处理机制,这被认为是上层协议:TCP 或 UDP 要做的事。
# 1.1IP 地址
在数据链路层中我们一般通过 MAC 地址来识别不同的节点,而在 IP 层我们也要有一个类似的地址标识,这既是 IP 地址。
32 位 IP 地址分为网络位和地址位,这样做可以减少路由器中路由表记录的数目,有了网络地址,就可以限定拥有相同网络地址的终端都在同一个范围内,那么路由表只需维护一条这个网络地址的方向,就可以找到相应的这些终端了。
A 类 IP 地址:0.0.0.0~127.0.0.0
B 类 IP 地址:128.0.0.1~191.255.0.0
C 类 IP 地址:192.168.0.0~239.255.255.0
# 1.2IP 协议头
这里只介绍八位的 TTL 字段。这个字段规定该数据包在穿过多少个路由之后才会被抛弃。某个 IP 数据包每穿过一个路由器,该数据包的 TTL 数值就会减少 1,当该数据包的 TTL 成为零,它就会被自动抛弃。
这个字段的最大值也就是 255,也就是说一个协议包也就在路由器里面穿行 255 次就会被抛弃了,根据系统的不同,这个数字也不一样,一般是 32 或者 64。
# 2.ARP 及 RARP 协议
ARP 是根据 IP 地址获取 MAC 地址的一种协议。
ARP(地址解析)协议是一种解析协议,本来主机是完全不知道这个 IP 对应的是哪个主机的哪个接口,当主机要发送一个 IP 包的时候,会首先查一下自己的 ARP 高速缓存(就是一个 IP-MAC 地址对应表缓存)
如果查询的 IP-MAC 值对不存在,那么主机就向网络发送一个 ARP 协议广播包,这个广播包里面就有待查询的 IP 地址,而直接收到这份广播的包就包含所有主机都查询自己的 IP 地址,如果收到广播包的某一个主机发现自己符合条件,那么就准备好一个包含自己的 MAC 地址的 ARP 包传送个发送 ARP 广播的主机。
而广播主机拿到 ARP 包后会更新自己的 ARP 缓存(就是存放 IP-MAC 对应表的地方)。发送广播的主机就会用新的 ARJP 缓存数据,准备好的数据链路层的数据包发送工作。
RARP 协议工作于此相反。
# 3.ICMP 协议
IP 协议并不是一个可靠的协议,他不保证数据被送达,那么,保证数据送达的工作应该有其他模块来完成。其中一个重要的模块就是 ICMP(网络控制报文)协议。ICMP 不是高层协议,而是 IP 层的协议。
当传送 IP 数据包发生错误。比如主机不可达,路由不可达等,ICMP 协议就会把错误信息封包,然后传回给主机。给主机一个处理错误的机会,这也就是为什么说建立在 IP 层以上的协议是可能做到安全的原因。
# 4.ping
ping 可以说是 ICMP 的最著名的应用,是 TCP/IP 协议的一部分。利用 ping 命令可以检测网络是否连通,可以很好的帮助我们分享和判定网络故障。
# 五.Traceroute
Traceroute 是用来帧测主机到目的主机之间所经路由情况的重要工具,也是最便利的工具。
Traceroute 的原理是非常有意思的,他首都奥目的主机 IP 后,首先给目的主机发送一个 TTL=1 的 UDP 数据包,而经过的第一个路由器收到这个数据包后,机会自动把 TTL 减一,而 TTL 变为 0 以后,路由器就把这个包给抛弃了,并同时产生一个主机不可达的 ICMP 数据报给主机。主机收到这个数据以后再发一个 TTL=2 的 UDP 数据报给目的主机,然后刺激第二个路由器给主机发 ICMP 数据报。如此往复到达目的主机。这样,traceroute 就拿到了所有的路由 IP。