TCP与UDP总结(自我复习用)

目录

网络层传输层的不同?

OSI模型以下优点:

一、TCP

1、为什么TCP是可靠的?

2、TCP服务的特点

3、TCP首部结构

4、TCP三次握手

(1)为什么是三次握手,不可以是两次吗?

(2)三次握手的作用

(3)三次握手哪个阶段容易出现攻击?

(4)三次握手哪个阶段会出现异常?

(5)第三次握手失败了怎么办?

(6)如果已经建立了连接,但是客户端突然出现故障了怎么办?

5、TCP四次挥手

(1) TIME_WAIT 状态存在的意义?

(2)MSL

(3)TIME_WAIT 和 CLOSE_WAIT 有什么区别?

6、拥塞控制

7、端口号

二、UDP

1、UDP服务特点

2、UDP如何实现可靠

3、UDP首部

 


网络层传输层的不同?

网络层为主机之间提供逻辑通信,而运输层为应用程序之间提供端到端的逻辑通信,位于网络层之上,并依赖网络层服务。运输层还要对收到的报文进行差错检测。在网络层,IP数据报首部的检验和字段,只检验首部是否出现差错而不检查数据部分。

根据应用程序的不同需求,运输层有两种不同的协议。分别是UDP和TCP协议

OSI模型以下优点:

(为什么要分层)
1、简化了相关的网络操作
2、提供即插即用的兼容性和不同厂商之间的接口标准
3、使各个厂商能够设计初具备互操作性的网络设备,加快数据通信网络发展
4、防止一个区域网络的变化移向另一个区域的网络,因此,每一个区域的网络能单独快速升级;
5、吧复杂的网络问题分解为小的简单问题,易于学习和操作

一、TCP

TCP(传输控制协议)为应用层提供可靠的、面向连接的和基于流的服务。

基于流的数据没有边界(长度)限制,他源源不断地从通信的一段流入另一端。发送端可以逐个字节地向数据流中写入数据,接收端也可以逐个字节地将他们读出。

1、为什么TCP是可靠的?

TCP协议使用超时重传、应答确认、滑动窗口、数据确认等方式来确保数据包被正确的发送至目的端口。

(1)应答确认

发送端发送的每一个TCP报文段都必须得到接收方的应答,才认为这个TCP报文段传输成功

(2)超时重传

发送端在发出一个TCP报文段后启动定时器,如果在定时时间内未收到应答,将重发该报文段

(3)数据确认

因为TCP报文段最终是以IP数据报发送的,而IP数据报到达接收端可能乱序、重复,所以TCP协议还会对接收到的TCP报文段重排、整理再交付给应用层。

(4)滑动窗口

TCP头里有一个字段叫Window,又叫Advertised-Window,这个字段是接收端告诉发送端自己还有多少缓冲区可以接收数据。于是发送端就可以根据这个接收端的处理能力来发送数据,而不会导致接收端处理不过来。

 

  • TCP的连接是全双工的且连接是一对一的,所以基于广播和多播的应用程序不能使用TCP服务,他们使用UDP服务。

全双工是指在发送数据的同时也能够接收数据,两者同步进行。例如打电话

半双工是指数据传输允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输。例如对讲机

单工是指通信过程的任意时刻,信息只能由一方A传到另一方B,则称为单工。

2、TCP服务的特点

在发送端开始不断地写数据的时候,数据被放到TCP发送缓冲区中,等到发送端要开始发送数据的时候,发送缓冲区的数据会被封装成一个或多个TCP报文段。当接收端接收端收到一个多个TCP报文段后,TCP模块将他们携带的应用程序的数据按照TCP报文段的序号依次放入TCP接收缓冲区中,并通知应用程序读取数据。接收端应用程序可以一次性将缓冲区的全部读出也可以分多次读,取决于该应用程序读缓冲区的大小。综上,发送端写操作次数和接收端读操作次数无数量关系 --字节流(无边界限制)

3、TCP首部结构

  • 状态位。SYN 是发起一个链接,ACK 是确认号(ACK=1 有效),RST 是重新连接,FIN 是结束连接,PSH提示接收端从接受缓冲区读走数据,为接受后续数据腾出空间;URG紧急指针(URG=1 有效)。因为 TCP 是面向连接的,因此需要双方维护连接的状态,这些状态位的包会引起双方的状态变更。
  • 窗口大小。TCP 要做流量控制,窗口指接收通告窗口,它要告诉本端接收缓冲区还能容纳多少字节的数据,让对方控制发送数据的速度。
  • 检验和。由发送端填充,接收端对收到报文段进行CRC算法用来检验在传输过程中是否损坏。校验不仅包括头部还包括数据(可靠传输的重要保障)
  • 头部。TCP首部最大长度60字节(选项长度最多40字节)

4、TCP三次握手

(1)为什么是三次握手,不可以是两次吗?

不可以

假如客户端给服务器端发送了一个连接请求,报文丢失而未收到确认,这时由于TCP的超时重传机制,即客户端在一段时间没有收到服务器端发送的确认连接报文,客户端就会重新发送连接请求给服务端,这时服务端接收到并回复客户端确认连接,建立连接。

此时,客户端是发送了两个请求,一个是失效的,一个是到达服务端。假设此时这个失效的请求并没有丢失,只是由于网络阻塞滞留的,此时服务端收到了这个失效的请求,他其实是一个失效的请求,但是服务端会认为是客户端要建立新连接,所以会回复客户端确认,如果没有第三次握手的话,服务端接收到这个请求,他就会认为连接建立了,他就开始等到客户端给他发送数据,但是由于客户端并没有建立连接的请求,他就会忽视服务端的请求,导致服务端一直在等待,浪费了服务端的资源。

三次握手就可以避免上面的情况发生,服务端拿到这个失效的连接请求后,发送确认连接给客户端,客户端不回复他确认连接,服务端收不到确认,就知道客户端并没有要求连接。

(2)三次握手的作用

1) 使得通讯双发都做好通讯的准备
2) 告诉对端本端通讯所选用的报文标识号
3) 防止已失效的连接请求报文段又突然传递到了服务端,从而产生错误

(3)三次握手哪个阶段容易出现攻击?

第二个阶段容易出现攻击 

比较典型的是 syn 泛洪攻击,或叫 syn 溢出攻击。
syn 溢出攻击,即出现在第二个阶段,如果客户机伪造出大量第一次的 syn同步报文,服务端就会依次耗掉很多资源来保存客户端的信息,并进行确认,实际确认是会失败的,但失败是需要一定时间,因为服务端会连续多次进行第二次握手确认后才认定失败。那么短时间有大量 syn 同步报文涌向服务端,服务器资源可能被耗尽,就可能导致正常的客户端得不到响应而失败。

(4)三次握手哪个阶段会出现异常?

第二个阶段可能异常

1)如果服务器相应的端口未打开,会回复 RST 复位报文,握手失败。

2)listen 创建的监听队列达到上限,也可能失败。

(5)第三次握手失败了怎么办?

 
当client与server的第三次握手失败了之后,即client发送至server的确认建立连接报文段未能到达server,server在等待client回复ACK的过程中超时了,那么server会向client发送一个RTS报文段并进入关闭状态,即:并不等待client第三次握手的ACK包重传,直接关闭连接请求,这主要是为了防止泛洪攻击,即坏人伪造许多IP向server发送连接请求,从而将server的未连接队列塞满,浪费server的资源。
 

(6)如果已经建立了连接,但是客户端突然出现故障了怎么办?

TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。
 

TCP 的顺序问题,丢包问题,流量控制都是通过滑动窗口来解决的
拥塞控制时通过拥塞窗口来解决的

5、TCP四次挥手

(1) TIME_WAIT 状态存在的意义?

TIME_WAIT 状态是:主动断开连接的一端收到对端的 FIN 报文段并且将 ACK 报文段发出后的一种状态。
意义:
1) 保证迟来的报文段能被识别并丢弃。

让之前建立的client-server通信过程中或者是挥手过程中由于网络不通畅产生的滞留报文段失效。如果不等待2MSL,那么建立新连接之后,可能会收到上一次连接的旧报文段,可能会造成混乱。

2) 保证可靠的终止 TCP 连接。保证对端能收到最后的一个 ACK,如果 ACK 丢失,在TIME_WAIT状态本端还可以接受到对端重传的FIN报文段并重新发送ACK。所以 TIME_WAIT 的存在时间为 2MSL。

如果客户端传送的最后一个ACK丢失了,服务端等不到客户端的确认,由于超时重传,他就会给客户端重新发送FIN,客户端在等待的这段时间收到FIN,就会给服务端重新发送ACK,服务端收到后就会正常关闭。

如果没有TIME_WAIT,即客户端发送完ACK就关闭,服务端如果没有收到的话,就会一直等待,无法正常关闭。

(2)MSL

MSL指一个片段在网络中最大的存活时间,2MSL就是一个发送和一个回复所需的最大时间

(3)TIME_WAIT 和 CLOSE_WAIT 有什么区别?

CLOSE_WAIT 是被动关闭的一端在接收到对端关闭请求(FIN 报文段)并且将 ACK发送出去后所处的状态,这种状态表示:收到了对端关闭的请求,但是本端还没有完成工作,还未关闭。
TIME_WAIT 状态是主动关闭的一端在本端已经关闭的前期下,收到对端的关闭请求(FIN 报文段)并且将 ACK 发送出去后所处的状态,这种状态表示:双方都已经完成工作,只是为了确保迟来的数据报能被是被并丢弃,可靠的终止 TCP 连接。

6、拥塞控制

7、端口号

 

二、UDP

UDP(用户数据报协议)为应用层提供不可靠的、无连接的和基于数据报的服务。

没有拥塞控制--实时应用

支持一对一,一对多,多对一,多对多

首部开销小 ,8字节

基于数据报的服务,每个UDP数据报都有一个长度,接收端必须以该长度的最小单位将其所有内容一次性读出,否则数据将被截断。

无连接:那么每次发送数据都要明确接收端的地址。

不可靠:无法保证数据从发送端正确的传送到目的端。若数据中途丢失,或者目的端通过数据检验发现数据错误而将其丢弃,则UDP协议只是简单的通知应用程序发送失败。

1、UDP服务特点

发送端每执行一次写操作,UDP模块就会将其封装成一个UDP数据报并发送给接收端。接收端必须及时的针对每一个UDP数据报执行读操作(通过recvfrom调用),否则就会丢包(发生在较慢的服务器上),并且,如果没有指定足够的应用程序缓冲区来读取UDP数据,则UDP数据将会被截断。

2、UDP如何实现可靠

在应用层自己实现类似 tcp 的应答确认,超时重传等机制。来保证可靠性。

3、UDP首部

伪首部;为了计算校验和,不向上递交,也不向下传递。出错就丢弃

TCP三次握手四次挥手总结(流程、常见问题、会发生的攻击、防范方法)

TCP的三次握手与四次挥手理解及面试题(很全面)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值