TCP与UDP的区别

1. tcp/ip的三次握手和四次挥手是什么概念,以及状态变化过程?

请参考文章:https://blog.csdn.net/Ginny_2017/article/details/90732574
 

2. 建立连接需要3次,为什么断开连接需要4次?

TCP是全双工的状态,Client与Server必须两边各自发送了FIN头的确认后, 才可以关闭。

Client端在发送了带有FIN+seq包时,Client的状态变为FIN-WAIT-1,Server端此时可能还在传数据,它会发送一个ACK的确认,告诉Client端,我已经收到了你的请求,但是未准备就绪,状态变为CLOSE-WAIT。Client在收到Server端的确认后,状态变为FIN-WIAT-2。当Server端准备好关闭后,会主动发送带有FIN包头给Client端,此时Server端会变成LAST-ACK,Client端在收到Server的请求后,会发送一个确认包,Client进入Time-Wait的状态, Server进入Closed的状态。

3. 三次握手有哪些不安全性?

   SYN的攻击,Server在收到Client的SYN-ACK之前是处于半连接的状态,此时Server的状态是SYN-RECV,当收到ACK确认后,Server与Client之间会变成ESTABLISHED的状态。SYN攻击会伪造大量的虚拟IP,并向Server端发送带有SYN包的请求, 当Server端回复ACK给Client端时,因为Client端伪造了大量的IP,这些伪造源地址将无法给出ACK确认。Server端将会有不断发送请求确认,直至超时,这些SYN包长时间占用未连接队列,导致SYN的队列占满而被丢弃,从而引起网路拥堵,直至瘫痪。

4. TCP和UDP的区别?TCP是通过什么方式来保证可靠性的

  • TCP 是面向连接的,UDP 是面向无连接的
  • UDP程序结构较简单
  • TCP 是面向字节流的,UDP 是基于数据报的
  • TCP 保证数据正确性,UDP 可能丢包
  • TCP 保证数据顺序,UDP 不保证

5. tcp四层网络模型和osi七层网络模型分别是什么?以及每一层的作用

分层负载 
       了解了分层的概念以后,我们再去理解所谓的二层负载、三层负载、四层负载、七层负载就容易多了。
一次 http 请求过来,一定会从应用层到传输层,完成整个交互。只要是在网络上跑的数据包,都是完整的。可以有下层没上层,绝对不可能有上层没下层。
二层负载
        二层负载是针对 MAC,负载均衡服务器对外依然提供一个 VIP(虚 IP),集群中不同的机器采用相同 IP 地址,但是机器的 MAC 地址不一样。当负载均衡服务器接受到请求之后,通过改写报文的目标 MAC 地址的方式将请求转发到目标机器实现负载均衡二层负载均衡会通过一个虚拟 MAC 地址接收请求,然后再分配到真实的 MAC 地址
三层负载
       三层负载是针对 IP,和二层负载均衡类似,负载均衡服务器对外依然提供一个 VIP(虚 IP),但是集群中不同的机器采用不同的 IP 地址。当负载均衡服务器接受到请求之后,根据不同的负载均衡算法,通过 IP 将请求转发至不同的真实服务器三层负载均衡会通过一个虚拟 IP 地址接收请求,然后再分配到真实的 IP 地址
四层负载
       四层负载均衡工作在 OSI 模型的传输层,由于在传输层,只有 TCP/UDP 协议,这两种协议中除了包含源 IP、目标 IP 以外,还包含源端口号及目的端口号。四层负载均衡服务器在接受到客户端请求后,以后通过修改数据包的地址信息(IP+端口号)将流量转发到应用服务器。四层通过虚拟 IP + 端口接收请求,然后再分配到真实的服务器
七层负载
       七层负载均衡工作在 OSI 模型的应用层,应用层协议较多,常用 http、radius、dns 等。七层负载就可以基于这些协议来负载。这些应用层协议中会包含很多有意义的内容。比如同一个Web 服务器的负载均衡,除了根据 IP 加端口进行负载外,还可根据七层的 URL、浏览器类别来决定是否要进行负载均衡
七层通过虚拟的 URL 或主机名接收请求,然后再分配到真实的服务器。

6. 什么是滑动窗口协议?它的实现原理是什么?

流量控制技术:用来解决网络拥堵情况,对于同时发送的数据, 导致中间节点阻塞掉包,最终都发送不了数据,所以就有了滑动窗口来机制。

发送窗口:

  1. 就是发送端允许连续发送的幀的序号表。
  2. 发送端可以不等待应答而连续发送的最大幀数称为发送窗口的尺寸。

 

接收窗口:

1.接收方允许接收的幀的序号表,凡落在 接收窗口内的幀,接收方都必须处理,落在接收窗口外的幀被丢弃。

2.接收方每次允许接收的幀数称为接收窗口的尺寸。


7. 服务器上TIME_WAIT状态的连接过多,怎么解决?

查看当前系统下所有连接状态的数:

[root@vps ~]#netstat -n|awk '/^tcp/{++S[$NF]}END{for (key in S) print key,S[key]}'
TIME_WAIT 286
FIN_WAIT1 5
FIN_WAIT2 6
ESTABLISHED 269
SYN_RECV 5
CLOSING 1

如发现系统存在大量TIME_WAIT状态的连接,通过调整内核参数解决:
编辑文件/etc/sysctl.conf,加入以下内容:

net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30

然后执行 /sbin/sysctl -p 让参数生效。

net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
net.ipv4.tcp_fin_timeout 修改系默认的 TIMEOUT 时间

其它参数说明:
net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
net.ipv4.tcp_fin_timeout = 30 表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。
net.ipv4.tcp_keepalive_time = 1200 表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。
net.ipv4.ip_local_port_range = 1024 65000 表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。
net.ipv4.tcp_max_syn_backlog = 8192 表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
net.ipv4.tcp_max_tw_buckets = 5000 表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。
默 认为180000,改为5000。对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于Squid,效果却不大。此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。

注:
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1

设置这两个参数: reuse是表示是否允许重新应用处于TIME-WAIT状态的socket用于新的TCP连接; recyse是加速TIME-WAIT sockets回收

 http://blog.sina.com.cn/s/blog_8e5d24890102w9yi.html

#netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

返回结果如下:

LAST_ACK 14

SYN_RECV 348

ESTABLISHED 70

FIN_WAIT1 229

FIN_WAIT2 30

CLOSING 33

TIME_WAIT 18122

一般Apache的配置是:

Timeout 30  

KeepAlive On   #表示服务器端不会主动关闭链接  

MaxKeepAliveRequests 100  

KeepAliveTimeout 180  

表示:Apache不会主动关闭链接,

两种情况下Apache会主动关闭连接:

1、Apache收到了http协议头中有客户端要求Apache关闭连接信息,如setRequestHeader("Connection", "close");  

2、连接保持时间达到了180秒的超时时间,将关闭。

如果配置如下:

KeepAlive Off   #表示服务器端会响应完数据后主动关闭链接  

参考自:https://www.cnblogs.com/xiaomayizoe/p/5258754.htm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Socket编程中,TCPUDP是两种不同的传输协议。TCP(Transmission Control Protocol)是一种面向连接的协议,而UDP(User Datagram Protocol)是一种无连接的协议。它们在以下几个方面有所不同: 1. 连接性:TCP是面向连接的,它在通信之前需要先建立连接,然后在可靠的双向通信中保持这个连接。UDP是无连接的,每个数据包都是独立的,发送者和接收者之间没有建立连接的过程。 2. 可靠性:TCP提供可靠的数据传输,它使用确认和重传机制来确保数据的准确性和完整性。UDP不保证数据的可靠性,因此在传输过程中可能会丢失数据包。 3. 速度和效率:由于TCP提供的可靠性和连接管理的机制,它的速度相对较慢,而UDP不需要连接建立和维护的开销,因此速度更快。 4. 应用场景:TCP适用于需要可靠传输和顺序传输的应用,例如文件传输,电子邮件等。UDP适用于实时应用,例如音频和视频流,游戏等,对于这些应用来说,速度和实时性更为重要,而可靠性可以通过应用层来处理。 总结起来,TCP提供了可靠的、面向连接的传输,适用于重要数据的传输,而UDP提供了快速的、无连接的传输,适用于实时性要求较高的应用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Scoket编程基础 -- TCPUDP 的 简介及其区别](https://blog.csdn.net/Czhenya/article/details/78299152)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [TCPUDP 在socket编程中的区别(转载)](https://blog.csdn.net/LIN943168247/article/details/120264124)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值