《计算机网络》 TCP/IP笔记

TCP/IP协议

是一系列网络协议的总称,是网络通信的基本骨架。TCP/IP协议模型在OSI七层模型的基础上,通过合并的方式,简化为四层,分别为应用层,传输层,网络层以及链路层。

我们通常的应用程序都工作在应用层,当各个应用之间通信时,传输层的TCP模块负责给HTTP数据添加TCP头部等信息;网络层的IP模块负责给HTTP数据添加IP头部等信息;链路层添加以太网首部等信息,并且通过电信号来传输数据包;然后数据包会依次经过对方的链路层,网络层,传输层以及应用层,实现数据的通信。

运输层

1.常见的网络层协议

1.ARP工作原理。

ARP是地址解析协议
(1)首先,每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系。

(2)当源主机要发送数据时,首先检查ARP列表中是否有对应IP地址的目的主机的MAC地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送ARP数据包,该数据包包括的内容有:源主机IP地址,源主机MAC地址,目的主机的IP地址。

(3)当本网络的所有主机收到该ARP数据包时,首先检查数据包中的IP地址是否是自己的IP地址,如果不是,则忽略该数据包,如果是,则首先从数据包中取出源主机的IP和MAC地址写入到ARP列表中,如果已经存在,则覆盖,然后将自己的MAC地址写入ARP响应包中,告诉源主机自己是它想要找的MAC地址。

(4)源主机收到ARP响应包后。将目的主机的IP和MAC地址写入ARP列表,并利用此信息发送数据。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。

广播发送ARP请求,单播发送ARP响应。

2.ICMP协议

确认IP报是否成功送达目的地址

ICMP是InternetControl Message Protocol,因特网控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由器是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。ICMP报文有两种:差错报告报文和询问报文。

3.IP协议(Internet Protocol,网际协议)

主要负责将数据包发给最终的目标计算机。

4.DHCP协议

给网络中的主机动态的分配IP地址

传输层

1.传输协议之UDP

特点:

  1. 无需建立连接
  2. 无连接状态
  3. 分组首部开销小,TCP20字节诶,UDP仅8字节
  4. UDP没有拥塞控制,应用层可以更好的控制要发送的数据和发送时间,虽然会造成数据的丢失,但是时延会比较小,参考视频会议和直播。
  5. 常用作一次性传输少量数据,如qq微信发消息,也可以用在直播。
  6. 尽最大可能交付,但是不保证可靠。
  7. 面向报文的,报文是最小处理单位。

2.传输协议之TCP

特点

  1. 面向连接
  2. 一条tcp只能有两个端点,即点对点
  3. 提供可靠的交付服务
  4. 全双工通信,即你可以发给我数据,我可以发给你。(UDP想发就发,没有通道)
  5. 面向字节流,每次交互都是一个数据块。

3.TCP连接管理

1.连接

建立过程,3次握手。
SYN是标志位,1就是希望连接
ACK是确认位,为1有效,0无效
FIN为1表示希望断开
大写和小写含义不同

  1. 客户向服务器发一个连接请求,(SYN=1,seq=x)即SYN=1希望建立连接,seq=x是随便起一个序列号,看你能不能收到。
  2. 服务器收到消息,回复一句。(SYN=1,ACK=1,seq=y,ack=x+1)即SYN=1希望建立连接,ACK=1表示我收到你的信息,seq=y随便起一个序号,看你能不能收到,ack=x+1,表示你的x我收到了,且我希望收到你的x+1这个消息。
  3. 客户端收到服务器的消息后,回复一句(ACK=1,seq=x+1,ack=y+1)即我知道建立连接了,ACK=1表示我收到你的信息,seq=x+1因为你期望的下一条消息就是x+1,ack=y+1表示你的y我收到了,我期望收到你的y+1。
  4. 此时三次握手完成。

a.为什么要三次握手(此时附加条件是,为什么不是两次握手)

为了实现可靠数据传输, TCP 协议的通信双方, 都必须维护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的。 三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已经收到了序列号起始值的必经步骤

如果只是两次握手, 至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认。

其实就好比日常生活中,两个人打电话,a说喂,在吗,b回一句喂,我在。那如果a没收到这个回复就惨了,其实连接了,但a以为没连接,就会消耗资源。那么第三次握手实际就是,a收到了b的第二次握手后,给b发的一句,嗯,我听到你了,我知道你在。而此时就可以发数据了,也就是说,在第三次握手的时候就能发数据。

刚刚的例子一旦b收到后,就会处于工作状态,b发送的我收到了在路上丢失了,则a不知道是否连接。因此a不会去发数据。就形成了僵局。

第2种理解,如果两个都通信完了,都要关闭了,则失效的一个连接请求过来了b,如果是两次连接,那么b会处于工作状态,则a不知道什么情况,还准备关闭呢,则此时b造成资源浪费

b.SYN洪泛攻击

A(攻击者)发送TCP SYN,SYN是TCP三次握手中的第一个数据包,而当这个服务器返回ACK以后,A不再进行确认,那这个连接就处在了一个挂起的状态,也就是半连接的意思,那么服务器收不到再确认的一个消息,还会重复发送ACK给A。这样一来就会更加浪费服务器的资源。A就对服务器发送非法大量的这种TCP连接,由于每一个都没法完成握手的机制,所以它就会消耗服务器的内存最后可能导致服务器死机,就无法正常工作了。更进一步说,如果这些半连接的握手请求是恶意程序发出,并且持续不断,那么就会导致服务端较长时间内丧失服务功能——这样就形成了DoS攻击。这种攻击方式就称为SYN泛洪攻击。

那么我们如何去防范这种SYN攻击呢?

其实最常用的一个手段就是优化主机系统设置。比如降低SYN timeout时间,使得主机尽快释放半连接的占用或者采用SYN cookie设置,如果短时间内收到了某个IP的重复SYN请求,我们就认为受到了攻击。我们合理的采用防火墙设置等外部网络也可以进行拦截。

2.断开

四次挥手

  1. 客户端发申请断开,(FIN=1,seq=u)其中FIN=1就是申请断开
  2. 服务器收到会,回复(ACK=1,seq=v,ack=u+1)其中表示,我收到了你的消息,给你发个u,并且我收到了你的u,期待你的u+1。此时客户端不发数据了,但服务端发的消息,客户端还是要接受,即TCP处于半关闭状态。
  3. 若服务器也没数据发了,就会发一个(FIN=1,ACK=1,seq=w,ack=u+1)表示我这边也申请断开,我是收到了你的消息的,给你发个w,收到了你的u,期望你的u+1。
  4. 客户端看到了服务器申请断开,则发送(ACK=1,seq=u+1,ack=w+1)。表示我收到你的消息了,并且受到了你的w,期望你的w+1,我发的消息是u+1。但此时TCP还没有释放掉,客户端需要等待2MSL时间才可以。

a.为什么要4次挥手

个人理解,为了保证正常的数据传输,我这边还有数据的话,必须要传完,如果设定为不传这些数据,那么可以理解为和3次握手时一样的。也就是说,如果我发送你第3次挥手,服务器就关闭了,那么当这个消息丢失时,客户端就断开不了,所以服务器要知道客户端是否收到,因此客户端要发一个确认应答,这样服务端才能顺利关闭。

b.四次挥手主动方为什么需要等待2MSL?“

答:主动关闭方在收到被动一方发出的FIN信号,会立马发送ACK确认信号,之后状态转变为TIME_WAIT,等待2MSL后才会进入CLOSE状态。我们先来解释下什么叫MSL(Maximum Segment Lifetime)吧。

MSL表示最大报文生存周期,任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。

主动关闭方需要等待2MSL是为了,防止最后一次ACK没有被正确的传给被动方,被动关闭方会再次发送第3次挥手的内容,再次申请关闭。也就是说,客户端没收到服务端的第2次发送第三次挥手的内容时,就认为服务端收到了客户端发的第4次挥手。而这一判断过程需要2MSL

4.TCP可靠传输

首先要说明,TCP的可靠是顺序一致,所以发送的abc收到的就是abc,而UDP有可能收到的是bc。
1.校验
UDP中运行丢失,但不允许发的a变成了c。因此校验这一块,UDP和TCP一样,也就是发送的数据和收到的同一数据必须正确。
2.序号
将字节流按序号编号发送
3.确认
通过序号确认你的顺序,顺序不对,会重置顺序让你传,比如abc变成了ac,那么就要重新从b传起。
4.重传
超时和冗余ACK就重传。如上面的abc中的例子,重新传b,有可能b只是堵塞了,才没到,所以只有当出现好几次要求重传b,才真的传b,这样的b的ACK就比较多,就是冗余的。

5.TCP流量控制

TCP的接收端只允许发送端发送接收端缓冲区(rwnd)能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议。 (TCP 利用滑动窗口实现流量控制)

图片说明

TCP为每一个连接设有一个持续计时器(persistence timer)。只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器。若持续计时器设置的时间到期,就发送一个零窗口控测报文段(携1字节的数据),那么收到这个报文段的一方就重新设置持续计时器。

6.TCP拥塞控制

1.拥塞控制和流量控制的区别

流量控制是端到端的控制,例如A通过网络给B发数据,A发送的太快导致B没法接收(B缓冲窗口过小或者处理过慢),这时候的控制就是流量控制,原理是通过滑动窗口的大小改变来实现。 是点对点的通信控制。

拥塞控制是A与B之间的网络发生堵塞导致传输过慢或者丢包,来不及传输。防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不至于过载。拥塞控制是一个全局性的过程,涉及到所有的主机、路由器,以及与降低网络性能有关的所有因素。

2.拥塞控制的4种算法

慢开始和拥塞避免
快重传和快恢复

3.慢开始和拥塞避免

重传计时器超时
图片说明

4.快重传和快恢复

注意,快重传是只要收到连续3个冗余的相同的ACK就执行乘法减小。
图片说明

全部评论

相关推荐

xwqlikepsl:感觉很厉害啊,慢慢找
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务