计算机网络基础知识

TCP

传输控制协议(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流传的传输层协议。

在一个TCP连接中,仅有两方进行彼此通信。广播和多播不能用于TCP

TCP使用校验和,确认和重传机制来保证可靠传输

TCP给数据分节进行排序,并使用累积确认保证数据的顺序不变和非重复

TCP使用滑动窗口机制来实现流量控制,通过动态改变窗口的大小进行拥塞控制

TCP并不能保证数据一定会被对方接收到,因为这是不可能的。TCP能够做到的是,如果有可能,就把数据递送到接收方,否则就(通过放弃重传并且中断连接这一手段)通知用户。因此准确说TCP也不是100%可靠的协议,它所能提供的是数据的可能递送或故障的可靠通知

三次握手与四次挥手

三次握手(Three-way Handshake)是指建立一个TCP连接时,需要客户端和服务器总共发送3个包

三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号,交换TCP窗口大小信息。在socket编程中,在客户端执行connect()时。将触发三次握手:

第一次握手:(SYN=1,seq=x)

客户端发送一个TCP的SYN标志位置1的包,指明客户端打算连接的服务器的端口,以及初始序号X,保存在包头的序列号(Sequence Number)字段里。

发送完毕后,客户端进入 SYN_SEND 状态

第二次握手:(SYN=1,ACK=1,seq=y,ACKnumx+1)

服务器发回确认包(ACK)应答。即SYN标志位和ACK标志位均为1.服务器端选择自己ISN序列号,放到Seq域里,同时将确认序号(Acknowledgement Number)设置为客户的ISN加1,即X+1。

发送完毕后,服务器端进入SYN_RCVD状态

第三次握手:(ACK=1,ACKnumy+1)

客户端再次发送确认包(ACK),SYN标志位0,ACK标志位为1,并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方并且在数据段放写ISN的+1.

发送完毕后,客户端进入 ESTABLISHED 状态,当服务器端接收到这个包时,也进入 ESTABLISHED 状态,TCP握手结束。


四次挥手(Four-way handshake):TCP的连接的拆除需要发送四个包。客户端或服务器均可主动发送挥手动作,在socket编程中,任何一方close()操作即可产生产生挥手动作。

第一次挥手(FIN=1,seq=x)

假设客户端想要关闭连接,客户端发送一个FIN标志位置为1的包,表示自己已经没有数据可以发送了,但是仍然可以接受数据。

发送完毕后,客户端进入FIN_WAIT_1 状态

第二次挥手(ACK=1,ACKnum=X+1)

服务器端确认客户端的FIN包,发送一个确认包,表明自己接收到了客户端关闭连接的请求,但还没有准备好关闭连接。

发送完毕后,服务器端进入 CLOSE_WAIT 状态,客户端接收到这个确认包之后,进入 FIN_WAIT_2 状态,等待服务器端关闭连接。

第三次挥手(FIN=1,seq=y)

服务器端准备好关闭连接时,向客户端发送结束连接请求,FIN置为1

发送完毕后,服务器端进入 LAST_ACK 状态,等待来自客户端的最后一个ACK。

第四次挥手(ACK=1,ACKnumy+1)

客户端接收到来自服务器端的关闭请求,发送一个确认包,并进入 TIME_WAIT 状态,等待可能出现的要求重传的ACK包。

服务器端接收到了这个确认包之后,关闭连接,进入 CLOSED 状态

客户端等待了某个固定时间(两个最大段生命周期,2MSL,2Maximum Segment Lifetime)之后,没有收到服务器端的ACK,认为服务器端已经正常关闭连接,于是自己也关闭连接,计入 CLOSED 状态。


SYN攻击

在三次握手过程中,服务器发送SYN-ACK之后,收到客户端的ACK之前的TCP连接称为半连接(half-open connect).此时服务器处于 SYN_RCVD 状态,当收到ACK后服务器才能转入 ESTABLISHED 状态。

SYN 攻击指的是,攻击客户端在短时间内伪造大量不存在的IP地址,向服务器不断地发送SYN包,服务器回复确认包,并等待客户的确认。由于源地址是不存在的,服务器需要不断的重发直至超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN请求被丢弃,导致目标系统运行缓慢,严重者会引起网络堵塞甚至系统瘫痪。

SYN 攻击是一种典型的 DoS/DDoS 攻击。

检测 SYN 攻击非常的方便,当你在服务器上看到大量的半连接状态时,特别是源IP地址是随机的,基本上可以断定这是一次SYN攻击。在 Linux/Unix 上可以使用系统自带的 netstats 命令来检测 SYN 攻击。

SYN攻击不能完全被阻止,除非将TCP协议重新设计。我们所做的是尽可能的减轻SYN攻击的危害,常见的防御 SYN 攻击的方法有如下几种:

  • 缩短超时(SYN Timeout)时间
  • 增加最大半连接数
  • 过滤网关防护
  • SYN cookies技术

UDP协议

UDP是一个简单的传输层协议。和TCP相比,UDP有下面几个显著特性:

UDP缺乏可靠性。UDP本身不提供确认、序列后、超时重传等机制。UDP数据报可能在网络中被复制,被重新排序。即UDP不保证数据报回到达其最终目的地,也不保证各个数据报的先后顺序,也不保证每个数据报只到达一次。

UDP数据报是有长度的。每个UDP数据报都有长度,如果一个数据报正确地到达目的地的,那么该数据报的长度将随数据一起传递给接收方。而TCP是一个字节流协议,没有任何协议上的记录边界。

UDP是无连接的。UDP客户和服务器之前不必存在长期的关系。UDP发送数据报之前也不需要经过握手创建连接的过程。

UDP支持多播和广播



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值