tcp协议以及socket介绍

壹:tcp协议:可靠传输

                一: 3次握手,建立链接;4次挥手,断开链接

 

                     3次握手,建立链接:图解 ,这样双向通路就建立完成了。

                                      在建立链接时,并没有数据传输,所以中间两部可以合在一起,也就是3次握手,建立了链接(图1)

                                       此时,有一个问题,客户端给服务端发完包以后,服务端又回一个包,那么客户端如何知道,

                                       服务端回的这个包是基于上一次的请求信息而来的。所以需要一个记号,也就是seq=x,从而解决

                                       上述的问题(图2)。

                     4次挥手,断开链接:图解 , 建成链接之后,就该基于双向通路进行数据的传递了。

                                    而且说明一点:tcp协议传输数据更加可靠,这是因为tcp协议 “有求必应”,也就是客户端给服务端发一个包,

                                    服务端一定要回一个包,要有一个回应。所以数据更不容易丢失,才更加可靠。

                                    断开链接,由于要考虑到数据的发送是否已经完成,所以需要4步,才断开链接,例(图3),客户端数据发送完成,

                                    请求断开链接(fin=1),但是此时服务端数据可能并没有完成,所以不能合成3步。

                

                                       

 

                二: tcp协议的相关状态:状态可以在cmd中去查看,命令:netstat  -an  |findstr  ?(例:TCP)

                          (LISTENING,ESTABLISHED,……)

                        客户端上可以查看到什么样的状态信息:客户端一旦发送完一个请求信息syn=1以后,客户端立马会进入一个状态,

                              叫syn_send的状态。服务端在收到这个请求信息之前,服务端会首先处于一个状态,叫listen状态,一旦服务端

                              收到一个syn=1请求信息后,服务端就会从listen状态立马进入一个叫syn_rcvd的状态(received),代表收到请

                              求信息了。服务端收到请求信息后,服务端开始给客户端回数据,客户端一旦收到这个确认信息后,客户端会立

                              马进入到一个叫ESTABLISHED的状态(链接已经建立成功),那这个数据包回到服务端,服务端一旦收到ack=1

                              的确认信息后,服务端也会进入到一个叫ESTABLISHED的状态。

                       所以(图4) tcp三次握手在客户端会看到哪些状态,syn_send和ESTABLISHED,

                                                    在服务端会看到哪些状态,listen,syn_rcvd和ESTABLISHED

                               如果想要用上面的命令netstat..去捕捉这些状态的话,

                                           在客户端中,通常只能捕捉到ESTABLISHED状态,因为tcp三次握手速度非常快,客户端在发送完请求信息后,

                                                                瞬间就进入到了ESTABLISHED状态,所以几乎不可能捕捉到syn_send状态。

                                           在服务端中,通常只能捕捉到listen和ESTABLISHED状态,也是因为速度太快....

                                

                               (图5)tcp断开链接的几种状态:

                                   

                                     

 

                    三:syn洪水攻击:就是黑客模拟大量的假的客户端来向服务端发送正常的syn请求,发送给服务端以后,服务端就要响应回去,

                                         然后等待着客户端的回应,然而这是黑客模拟的假的客户端,并不会回应了,所以服务端的资源一直被占用着,这时

                                          syn_rcvd的状态就会大量涌现。

      

                   四:半连接池(backlog):服务端有一个半连接池,专门用来存请求信息,就是一个队列,先进先出,客户端来一个请求,

                                             就把请求放到半连接池中,注意,放的是请求数,不是链接数。当然如果遭受syn洪水攻击,就应该调高半

                                             连接池的大小,但这并不能从根本上解决问题,因为半连接池占用的是内存空间,所以最大也不会大过内存

                                             空间,所以如果流量足够大的情况下,半连接池的作用就没有用了。

                                               

贰:socket(套接字)介绍:socket是应用层与传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供

                                             应用层调用已实现进程在网络中通信。

 

                             基于tcp协议通信的套接字(简单版本)   例:

 

                                                 

         

                                          

                                 

                        

                                   

                                        

posted @ 2018-08-29 19:15  &nbsp  阅读(972)  评论(0编辑  收藏  举报