计算机网络面经之TCP协议(二)

9、TCP粘包与拆包

什么是粘包/拆包

在这里插入图片描述

粘包/拆包发生的原因

发生TCP粘包或拆包有很多原因,现列出常见的几点:
1、要发送的数据大于TCP发送缓冲区剩余空间大小,将会发生拆包。
2、待发送数据大于MSS(最大报文长度),TCP在传输前将进行拆包。
3、要发送的数据小于TCP发送缓冲区的大小,TCP将多次写入缓冲区的数据一次发送出去,将会发生粘包。
4、接收数据端的应用层没有及时读取接收缓冲区中的数据,将发生粘包。

粘包/拆包的解决办法

解决问题的关键在于如何给每个数据包添加边界信息,常用的方法有如下几个:

1、发送端给每个数据包添加包首部,首部中应该至少包含数据包的长度,这样接收端在接收到数据后,通过读取包首部的长度字段,便知道每一个数据包的实际长度了。
2、发送端将每个数据包封装为固定长度(不够的可以通过补0填充),这样接收端每次从接收缓冲区中读取固定长度的数据就自然而然的把每个数据包拆分开来。
3、可以在数据包之间设置边界,如添加特殊符号,这样,接收端通过这个边界就可以将不同的数据包拆分开。

10、SYN攻击

伪装的IP向服务器发送一个SYN请求建立连接,然后服务器向该IP回复SYN和ACK,但是找不到该IP对应的主机,当超时时服务器收不到ACK会重复发送。当大量的攻击者请求建立连接时,服务器就会存在大量未完成三次握手的连接,服务器主机backlog被耗尽而不能响应其它连接。即SYN泛洪攻击 (属于DOS的一种,发送大量的半连接请求,耗费CPU和内存资源,引起网络堵塞甚至系统瘫痪)

防范措施:
  1、降低SYN timeout时间,使得主机尽快释放半连接的占用
  2、采用SYN cookie设置,如果短时间内连续收到某个IP的重复SYN请求,则认为受到了该IP的攻击,丢弃来自该IP的后续请求报文

11、DNS解析过程

  • 请求一旦发起,若是chrome浏览器,先在浏览器找之前有没有缓存过的域名所对应的ip地址,有的话,直接跳过dns解析了,若是没有,就会找硬盘的hosts文件,看看有没有,有的话,直接找到hosts文件里面的ip

  • 如果本地的hosts文件没有能得到对应的ip地址,浏览器会发出一个dns请求到本地dns服务器本地dns服务器一般都是你的网络接入服务器商提供,比如中国电信,中国移动等。

  • 查询你输入的网址的DNS请求到达本地DNS服务器之后,本地DNS服务器会首先查询它的缓存记录,如果缓存中有此条记录,就可以直接返回结果,此过程是递归的方式进行查询。如果没有,本地DNS服务器还要向DNS根服务器进行查询。

  • 本地DNS服务器继续向域服务器发出请求,在这个例子中,请求的对象是.com域服务器。.com域服务器收到请求之后,也不会直接返回域名和IP地址的对应关系,而是告诉本地DNS服务器,你的域名的解析服务器的地址。

  • 最后,本地DNS服务器向域名的解析服务器发出请求,这时就能收到一个域名和IP地址对应关系,本地DNS服务器不仅要把IP地址返回给用户电脑,还要把这个对应关系保存在缓存中,以备下次别的用户查询时,可以直接返回结果,加快网络访问。

  • 比如访问www.qq.com

    【一句话:本地的浏览器缓存–>本地DNS服务器–>DNS根服务器–>DNS根服务器会返回顶级域名服务器的IP(这里是.com)给本地DNS服务器–>本地DNS服务器根据这个IP访问.com域的服务器–>com域服务器收到请求后发现无法解析,返回下一级DNS服务器地址(qq.com)服务器给本地DNS服务器–>本地DNS服务器收到地址后,访问qq.com域服务器,知道找到www.qq.com主机】

12、TCP和UDP的区别

  • TCP 是面向连接的,UDP 是面向无连接的

  • UDP程序结构较简单

  • TCP 是面向字节流的,UDP 是基于数据报的

  • TCP 保证数据正确性,UDP 可能丢包

  • TCP 保证数据顺序,UDP 不保证

    【一句话:面向连接与无连接、面向字节流与面向数据报、保证可靠性、结构简单】

13、TCP和UDP的特点

(1)UDP的特点

  • UDP是无连接的
  • UDP使用尽最大努力交付,即不保证可靠交付,
  • UDP是面向报文的;
  • UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等);
  • UDP支持一对一、一对多、多对一和多对多的交互通信;
  • UDP的首部开销小,只有8个字节,比TCP的20个字节的首部要短。

(2)TCP的特点

  • TCP是面向连接的
  • 每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的(一对一);
  • TCP提供可靠交付的服务。通过TCP连接传送的数据,无差错、不丢失、不重复、不失序;
  • TCP提供全双工通信。TCP允许通信双方的应用进程在任何时候都能发送数据。TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双方通信的数据;
  • 面向字节流。TCP中的“流”(stream)指的是流入进程或从进程流出的字节序列。“面向字节流”的含义是:虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序交下来的数据仅仅看成是一连串的无结构的字节流。

14、TCP 三次握手

第一次握手:客户端发送syn数据包(syn=j)给服务器,等待服务器确认

第二次握手:服务器收到syn包后进行确认,发送ACK包(ack=j+1),与此同时,自己也发送一个syn包(syn=k)

第三次握手: 客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1)

15、TCP四次挥手

第一次挥手:客户端发出一个FIN=1标记的数据包(Sqe = x),告诉服务端需要关闭连接,表示自己不再发送数据但可以接受数据,此时客户端进入FIN_WAIT_1状态【FIN,Seq = x】

第二次挥手:服务器发送一个ACK的确认报文,告诉客户端已经收到关闭请求,服务器需要继续发送未发送完的数据。此时服务器进入CLOSE_WAIT状态。客户端收到ACK数据包后进入FIN_WAIT_2状态,等待服务器关闭连接。【ACK, ACK = x+1】

第三次挥手:服务器关闭连接,发送FIN=1数据包(Seq = y),发完后服务器进入LAST_ACK状态,等待客户端确认。【FIN,Seq = y】

第四次挥手 :客户端接收到服务端的关闭请求,再发送ACK标记的确认包,进入TIME_WAIT状态,等待服务端可能请求重传的ACK包。 服务端接收到ACK包后,关闭连接,进入CLOSED状态。 客户端在等待2MSL后,没有接收到服务的ACK包(可能重传的包),认为服务器已关闭连接,自己也关闭连接,进入CLOSED状态。 【ACK,ACK = y+1】

【一句话:(1)FIN=1,发送seq=x,变成FIN_WAIT_1;(2)ACK=x+1,变成CLOSE_WAIT,客户端收到后变成FIN_WAIT_2;(3)FIN=1,发送seq=y,变成LAST_ACK;(4)客户端收到后进入TIME_WAIT,发送ack=y+1,2MSL都没收到服务器的超时重传,客户端变为CLOSE;服务器收到后变成CLOSE,】

16、计算机网络模型

(1)OSI 7层网络模型(自底向上):物理层,数据链路层,网络层,传输层,会话层,表示层,应用层 (会表应)

(2)TCP/IP 4层网络模型(自底向上):网络接口层(以太网协议),网络层(ip协议),传输层(tcp协议),应用层(http协议)

(3)五层模型:物理层、数据链路层、网络层、传输层、应用层

数据链路层:PPP、ARQ、CSMA

网络层:IP、ARP、ICMP、RQRP

传输层:TCP、UDP

应用层:FTP、HTTP、SMTP

img

17、TCP和UDP的首部字段

TCP首部(最少20字节):源端口、目的端口、序号、确认号、头部长度、6位保留位、5种标志位(每个1位)、16位窗口大小、16位校验和、16位紧急指针

在这里插入图片描述

UDP首部(最少8字节):源端口、目的端口、UDP长度、UDP校验和
在这里插入图片描述

18、建立网络连接的过程

(1)服务器创建监听socket

(2)绑定对外服务的端口号

(3)开始监听

(4)客户端连接到服务对应的端口

(5)服务器接受并为客户端产生新的socket

(6)服务端基于新socket与客户端交换数据

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值