TCP/IP协议是新版的网络协议,包括4层结构。
1.层次结构
TCP/IP协议分为四层:
1) 链路层, 有时也称作数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机
中对应的网络接口卡。它们一起处理与电缆(或其他任何传输媒介)的物理接口细节。
2) 网络层,有时也称作互联网层,处理分组在网络中的活动,例如分组的选路。在
T C P / I P协议族中,网络层协议包括 I P协议(网际协议) ,I C M P协议(I n t e r n e t互联网控
制报文协议) ,以及I G M P协议(I n t e r n e t组管理协议) 。
3 ) 运输层主要为两台主机上的应用程序提供端到端的通信。在 T C P / I P协议族中,有两个
互不相同的传输协议:T C P(传输控制协议)和U D P(用户数据报协议) 。
T C P为两台主机提供高可靠性的数据通信。它所做的工作包括把应用程序交给它的数据分
成合适的小块交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟
等。由于运输层提供了高可靠性的端到端的通信,因此应用层可以忽略所有这些细节。
而另一方面,U D P则为应用层提供一种非常简单的服务。它只是把称作数据报的分组
从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。任何必需的可靠
性必须由应用层来提供。
这两种运输层协议分别在不同的应用程序中有不同的用途,这一点将在后面看到。
4 ) 应用层负责处理特定的应用程序细节。
封装:
2.链路层
链路层主要有三个目的:
(1)为I P模块发送和接收I P数据报;
(2)为A R P模块发送A R P请求和接收A R P应答;
(3)为R A R P发送R A R P请求和接收R A R P应答。
3.IP
I P是T C P / I P协议族中最为核心的协议。所有的 T C P、U D P、I C M P及I G M P数据都以I P数据报格式传输。
IP协议头:
IP路由选择:
当一个IP数据包准备好了的时候,IP数据包是如何将数据包送到目的地的呢?它是怎么选择一个合适的路径来”送货”的呢?
最特殊的情况是目的主机和主机直连,那么主机根本不用寻找路由,直接把数据传递过去就可以了。至于是怎么直接传递的,这就要靠ARP协议了,后面会讲到。
稍微一般一点的情况是,主机通过若干个路由器(router)和目的主机连接。那么路由器就要通过ip包的信息来为ip包寻找到一个合适的目标来进行传递,比如合适的主机,或者合适的路由。路由器或者主机将会用如下的方式来处理某一个IP数据包。
(1)如果IP数据包的TTL(生命周期)以到,则该IP数据包就被抛弃。
(2)搜索路由表,优先搜索匹配主机,如果能找到和IP地址完全一致的目标主机,则将该包发向目标主机。
(3)搜索路由表,如果匹配主机失败,则匹配同子网的路由器。如果找到路由器,则将该包发向路由器。
(4)搜索路由表,如果匹配同子网路由器失败,则匹配同网号路由器,如果找到路由器,则将该包发向路由器。
(5)搜索路由表,如果以上都失败了,就搜索默认路由,如果默认路由存在,则发包。
(6)如果都失败了,就丢掉这个包。
ARP协议:
ARP(地址解析)协议是一种解析协议,本来主机是完全不知道这个IP对应的是哪个主机的哪个接口,当主机要发送一个IP包的时候,会首先查一下自 己的ARP高速缓存(就是一个IP-MAC地址对应表缓存),如果查询的IP-MAC值对不存在,那么主机就向网络发送一个ARP协议广播包,这个广播包 里面就有待查询的IP地址,而直接收到这份广播的包的所有主机都会查询自己的IP地址,如果收到广播包的某一个主机发现自己符合条件,那么就准备好一个包 含自己的MAC地址的ARP包传送给发送ARP广播的主机,而广播主机拿到ARP包后会更新自己的ARP缓存(就是存放IP-MAC对应表的地方)。发送 广播的主机就会用新的ARP缓存数据准备好数据链路层的的数据包发送工作。
4.UDP
U D P是一个简单的面向数据报的运输层协议:进程的每个输出操作都正好产生一个 U D P数据报,并组装成一份待发送的 I P数据报。
U D P不提供可靠性:它把应用程序传给 I P层的数据发送出去,但是并不保证它们能到达目的地。由于缺乏可靠性,我们似乎觉得要避免使用 U D P而使用一种可靠协议如 T C P。
5.TCP
5.1建立连接协议(三次握手)
(1)客户端发送一个带SYN标志的TCP报文到服务器。这是三次握手过程中的报文1。
(2) 服务器端回应客户端的,这是三次握手中的第2个报文,这个报文同时带ACK标志和SYN标志。因此它表示对刚才客户端SYN报文的回应;同时又标志SYN给客户端,询问客户端是否准备好进行数据通讯。
(3) 客户必须再次回应服务段一个ACK报文。
5.2连接终止协议(四次挥手)
由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
(1) TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送。
(2) 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1)。和SYN一样,一个FIN将占用一个序号。
(3) 服务器关闭客户端的连接,发送一个FIN给客户端。
(4) 客户段发回ACK报文确认,并将确认序号设置为收到序号加1。
5.3 TCP超时重传
T C P提供可靠的运输层。它使用的方法之一就是确认从另一端收到的数据。但数据和确认都有可能会丢失。 T C P通过在发送时设置一个定时器来解决这种问题。如果当定时器溢出时还没有收到确认,它就重传该数据。
5.4 保持鲜活
许多T C P / I P的初学者会很惊奇地发现可以没有任何数据流通过一个空闲的 T C P连接。也
就是说,如果T C P连接的双方都没有向对方发送数据, 则在两个T C P模块之间不交换任何信息。
例如,没有可以在其他网络协议中发现的轮询。这意味着我们可以启动一个客户与服务器建
立一个连接,然后离去数小时、数天、数个星期或者数月,而连接依然保持。中间路由器可
以崩溃和重启,电话线可以被挂断再连通,但是只要两端的主机没有被重启,则连接依然保
持建立。