网络协议

TCP/IP协议学习笔记

2016-10-16  本文已影响0人  A_Coder

一个协议族,比如TCP / IP,是一组不同层次上的多个协议的组合。TCP / IP通常被认为是一个四层协议系统,如图所示。

分层.png
  1. 链路层,有时也称作数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。它们一起处理与电缆(或其他任何传输媒介)的物理接口细节。它的作用:

为IP模块发送和接收IP数据报,
为ARP模块发送ARP请求和接收ARP应答(ARP:地址解析协议,将IP地 址转换成MAC地址),
为RARP发送RARP请求和接收RARP应答。

  1. 网络层,有时也称作互联网层,处理分组在网络中的活动,例如分组的选路。在TCP / IP协议族中,网络层协议包括IP协议(网际协议),ICMP协议(Internet互联网控制报文协议),以及IGMP协议(Internet组管理协议)。
  2. 运输层主要为两台主机上的应用程序提供端到端的通信。在TCP / IP协议族中,有两个互不相同的传输协议: TCP(传输控制协议)和UDP(用户数据报协议)。TCP为两台主机提供高可靠性的数据通信。它所做的工作包括把应用程序交给它的数据分成合适的小块交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟等。由于运输层提供了高可靠性的端到端的通信,因此应用层可以忽略所有这些细节。
    而另一方面, UDP则为应用层提供一种非常简单的服务。它只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。任何必需的可靠性必须由应用层来提供。这两种运输层协议分别在不同的应用程序中有不同的用途,这一点将在后面看到。
  3. 应用层负责处理特定的应用程序细节。几乎各种不同的TCP / IP实现都会提供下面这些通用的应用程序:
    1. Telnet 远程登录。
    1. FTP 文件传输协议。
    2. SMTP 简单邮件传送协议。

注:


接下来我们了解一下TCP/IP的工作流程:

当应用程序用TCP传送数据时,数据被送入协议栈中,然后逐个通过每一层直到被当作一串比特流送入网络。其中每一层对收到的数据都要增加一些首部信息。

封装.png

当应用程序从TCP接收数据时,首先数据链路层从ARP得到数据的传递信息,再从IP得到具体的数据信息

IP首部.png

IP协议头当中,最重要的就是TTL(IP允许通过的最大网段数量)字段(8bit),规定该数据包能穿过几个路由之后才会被抛弃。

当目的主机收到一个以太网数据帧时,数据就开始从协议栈中由底向上升,同时去掉各层协议加上的报文首部。。每层协议盒都要去检查报文首部中的协议标识,以确定接收数据的上层协议。这个过程称作分用( Demultiplexing)。

分用.png
IP路由选择

IP路由选择是简单的,特别对于主机来说。如果目的主机与源主机直接相连(如点对点链路)或都在一个共享网络上(以太网或令牌环网),那么IP数据报就直接送到目的主机上。否则,主机把数据报发往一默认的路由器上,由路由器来转发该数据报。大多数的主机都是采用这种简单机制。


IP路由选择.png
ARP协议工作原理
ARP协议工作原理.png
ICMP协议(网络控制文协议)

将IP数据包不能传送的错误信息传送给主机
查询报文

差错报文
不产生的情况:


IP路由器选择协议

先来看路由选择工作流程:

路由选择.png
TCP/IP的建立与断开

TCP报头最小长度:20字节
首先我们先来了解TCP报文段

TCP包首部.png

重要的标志我在图中也有标记,重点了解标志位

**需要注意的是: **
(1)不要将确认序号Ack与标志位中的ACK搞混了。
(2)确认方Ack=发起方Req+1,两端配对。


TCP连接的三次握手的过程(客户端我们用A表示,服务器端用B表示)

前提:A主动打开,B被动打开

三次握手的过程.png

简单来说,就是

确认应答信号Ack = 收到的seq + 1。 连接建立中,同步信号SYN始终为1。连接建立后,同步信号SYN=0。
当一端为建立连接而发送它的SYN时,它为连接选择一个初始序号。ISN(初始序号)随时间而变化,因此每个连接都将具有不同的ISN。RFC 793 [Postel1981c]指出ISN可看作是一个3 2比特的计数器,每4 m s加1。这样选择序号的目的在于防止在网络中被延迟的分组在以后又被传送,而导致某个连接的一方对它作错误的解释。


TCP断开的四次握手的过程
四次握手的过程.png

注意:中断连接端可以是Client端,也可以是Server端。

整个过程Client端所经历的状态如下:

Client端所经历的状态.png

整个过程Server端所经历的过程如下:


Server端所经历的过程.png

TCP优点:
1.可靠稳定;
2.传递数据前,有三次握手连接;
3.传递数据是,有确认、窗口、重传、拥塞控制;
4.传递数据后,会断开连接节省系统资源。
TCP缺点:
1.传输慢,效率低,占用系统资源高;
2.传递数据前,需要连接耗时;
3.传递数据时,确认、重传、拥塞控制等会消耗大量时间及CPU和内存等硬件资源;
4.容易受到攻击,如“SYN攻击”这样典型的DDOS攻击。


问题:

1.为什么A还要发送一次确认?
这主要是防止已失效的连接请求报文段突然又传送到B,因而产生错误。比如:A发送一个连接请求,但由于连接请求的报文丢失了而未收到B发过来的确认。因此,A再发一次请求,后来接到B的确认,建立了连接。数据传输完毕后,就释放连接。

2.避免SYN攻击
在三次握手连接中,Server发送SYN-ACK之后,等待Client的ACK之前的TCP连接称为半连接(half-open-connect),此时Server处于SYN_RCVD状态,当收到Client的ACK后,Server转入ESTABLISH状态。SYN攻击就是Client在短时间内伪造大量不存在的IP地址,向Server发送大量的SYN包,Server发送确认包,并等待Client的确认,由于源地址不存在,Server不断重新发送直至超时,这些伪造的SYN包长时间占据未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络堵塞甚至系统瘫痪。SYN攻击时常见的DDOS攻击,检测SYN攻击就是检测Server是否有大量半连接状态且源IP地址是随机的则可以断定遭到SYN攻击了,使用如下命令可以让之现行:
$ netstat -nap | grep SYN_RECV

3.为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。

4.为什么连接的时候是三次握手,关闭的时候却是四次握手?
因为当Server端收到Client端的SYN连接请求报文后,可以直接发SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到Server端所有的报文都发送完了,才能发送FIN报文,因此不能一起发送。故需要四步握手。

5.如何保证接收的顺序性?
TCP使用(ISN)初试序号seq和确认序号Ack机制保证了顺序性TCP的每个报文都是有序号的,确认序号Ack=seq+1;

上一篇下一篇

猜你喜欢

热点阅读