# 十一.tcp
# 一、TCP/IP模型
TCP/IP协议模型,包含了一系列构成互联网基础的网络协议,是Internet的核心协议。
基于TCP/IP的参考模型将协议分成四个层次,它们分别是链路层、网络层、传输层和应用层。
TCP/IP协议按照层次由上到下,层层包装。最上面的是应用层,这里有http,ftp等待我们熟悉的协议。而第二层则是传输层,著名的TCP和UDP协议就是在这个层次。第三层是网络层,IP协议就在这里,它负责对数据加上IP地址和其他的数据以确定传输的目标。第四层是数据链路层,这个层次为待传送的数据加入一个以太网协议头,进行CRC编码,为最后的数据传输做准备。
上图清楚地表示了TCP/IP协议中每个层的作用,而TCP/IP协议通信的过程其实就对应着数据入栈与出栈的过程。入栈的过程,数据发送方每层不断地封装首部与尾部,添加一些传输的信息,确保能传输到目的地。出栈的过程,数据接收方每层不断地拆除首部与尾部,得到最终传输的数据。
# 二、数据链路层
物理层负责0、1比特流与物理设备电压高低、光的闪灭之间的交换。数据链路层负责将0、1序列划分为数据帧从一个节点传输到临近的另一个节点,这些节点是通过MAC来唯一标识的(MAC,物理地址,一个主机会有一个MAC地址)
- 封装成帧:把网络层数据报加头和尾,封装成帧,帧头中包括源MAC地址和目的MAC地址。
- 透明传输:零比特填充、转义字符。
- 可靠传输:在出错率很低的链路上很少用,但是无线链路WLAN会保证可靠传输。
- 差错检测:接受者检测错误,如果发现错误,丢弃该帧。
# 三、网路层
# 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。