一、tcp与udp的概念
TCP ( Transmission Control Protocol )----------类似于打电话传输控制协议可靠的、面向连接的协议传输效率低UDP ( User Datagram Protocol )----------类似于发短信用户数据报协议不可靠的、无连接的服务传输效率高
二、TCP封装格式
序列号:给每个发送的数据段进行编号的
确认号:告诉对方哪个数据段之前的数据都收到了
6个标志位----flag
URG urgent 紧急
ACK acknowledgement 确认
PUSH push 通知应用程序尽快处理数据,不要让数据在缓存里停留 --》催
RST reset 重置,重新连接
SYN sync 同步,建立连接
FIN finish 请求断开连接
窗口大小
滑动窗口的大小,指明本地可接收数据的字节数
窗口 --> window --> 表示本机可以接受多少数据,这个值是可以变化的,主要是告诉对方,防止对方发送过多的数据过来,表示数据处理不了,丢失数据
端口号的范围
端口号的范围: 0~65535 1~65536
三次握手
netstat 是用来查看网络的状态 --> 开放的网络端口的情况
[root@slave-mysql ~]# netstat -anplut
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 828/sshd
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 19743/nginx: master
tcp 0 0 192.168.88.27:22 192.168.88.22:60420 ESTABLISHED 20104/sshd: root [p
-a all(所有)
-n number 以数字的形式显示
-p program 程序的名字[--listening|-l] 监听
[--tcp|-t]
[--udp|-u]
里面的ESTABLISHED指建立连接 --> 3次握手完成就是ESTABLISHED
queue --》队列
Recv-Q
Established: The count of bytes not copied by the user program connected to this socket.
内核空间里的socket队列里还有多少数据没有被用户空间里的进程复制(取)走
说明应用程序非常忙,处理不过来了Listening: Since Kernel 2.6.18 this column contains the current syn backlog.
Send-Q
Established: The count of bytes not acknowledged by the remote host.
还有多少字节的数据没有被远程主机确认--》发送出去的数据包还没有收到确认Listening: Since Kernel 2.6.18 this column contains the
maximum size of the syn backlog.
记录哪些服务使用哪些端口的文件
/etc/services
四次断开
客户机和服务器谁先断开连接time wait就在哪一方
2MSL
msl:最长报文寿命
time-wait比较多,是什么原因?
说明nginx服务器主动大量的断开客户端的连接
谁发起断开请求,time-wait状态就在哪边
last-ack是出现在被断开的一方
last-ack 非常多说明出现了什么问题?
说大量的客户端和服务器断开连
TCP流控机制
参考:百度安全验证
滑动窗口的作用
控制流量
拥塞控制的四种算法
1)慢启动;
2)拥塞避免;
3)拥塞发生(快重传);
4)快速恢复
TCP差错控制的3种方式
校验和确认(就是各种计时器)•受损伤的数据段•丢失的数据段•重复的数据段•失序的数据段•确认的丢失超时
TCP的计时器
重传计时器 --> 重新发送一次数据,确保数据可以收到
坚持计时器 --> 为了防止零窗口死锁
保活计时器 --> 防止两个TCP之间的连接长时间的空闲
时间等待计时器 --> 连接终止期间使用的
在发送了最后一个ACK后,不立即关闭连接,而是等待一段时间(2MSL),保证能接收到重复的FIN数据段。
进程对应的端口号
nginx : 80
mysql : 3306
ssh : 22
dns: 53
QQ: 8000
https:443
ftp:21
三、UDP
udp封装格式