《重启10》
java笔试-常见笔试选择题-TCP/HTTP
TCP/HTTP
常见的Tcp/HTTP的题目一般都是围绕着三次握手这个主题,所以我们应该要去了解客户端与服务端进行TCP/HHTTP的连接请求时的三次握手的流程。
TCP三次握手
所谓三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。
三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换 TCP 窗口大小信息.在socket编程中,客户端执行connect()时。将触发三次握手。
可能你是那种一看图就头晕的人,那博主帮你降解一下:
X:发送序列号 Y:确定序列号
第一次握手:客户端:发送X
第二次握手:服务端:发送Y,确定X+1
第三次握手:客户端:发送X+1,确定Y+1
SYN攻击
在三次握手过程中,服务器发送SYN+ACK之后,收到客户端的ACK之前的TCP连接称为半连接(half-open connect)(第二次握手).此时服务器处于Syn_RECV状态.当收到ACK后,服务器转入ESTABLISHED状态.
Syn攻击就是 攻击客户端 在短时间内伪造大量不存在的IP地址,向服务器不断地发送syn包(第一次握手),服务器回复确认包(第二次握手),并等待客户的确认,由于源地址是不存在的(不进行第三次握手),服务器需要不断的重发直 至超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN请求被丢弃,目标系统运行缓慢,严重者引起网络堵塞甚至系统瘫痪。
Syn攻击是一个典型的DDOS攻击。检测SYN攻击非常的方便,当你在服务器上看到大量的半连接状态时,特别是源IP地址是随机的,基本上可以断定这是一次SYN攻击.在Linux下可以如下命令检测是否被Syn攻击
netstat -n -p TCP | grep SYN_RECV
一般较新的TCP/IP协议栈都对这一过程进行修正来防范Syn攻击,修改tcp协议实现。主要方法有SynAttackProtect保护机制、SYN cookies技术、增加最大半连接和缩短超时时间等.
但是不能完全防范syn攻击。
某数字大厂的一道tcp/http的选择题
1.TCP建立连接的过程采用三次握手。已知第三次握手报文的发送序列号为1000,确认序列号为2000,请问第二次握手报文的发送序列号和确认序列号分别为?
ps:如果你了解过这方面的知识是不是这道题想都不用想
答案:1999 1000