02,网络编程
Posted lijieshi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了02,网络编程相关的知识,希望对你有一定的参考价值。
首先服务端处于鉴定状态,然后客户端发送一条请求syn和安好seq=x,服务端收到请求和暗号开始响应,给客户端发送syn请求,暗号y和响应信号ack=x+1(1表示成功,0表示失败),
客户端收到来世服务端的暗号与服务端发送的响应信号ack比对,比对成功,成功建立客户端到服务端的数据传输路线.
注意:如果一直有大量客户端发送syn请求,而没有大量建立服务端到客户端的数据传输路线,则很大程度表明有人在攻击服务端,用这个方法阻碍正常用户的syn请求进入
数据传输层
四次挥手:首先服务端成功传输了所有数据给客户端,然后开始发送一条关闭服务端的数据传输线路的请求fin,暗号seq=x+2,客户端接收到请求,响应并关闭了服务端到客户端的数据传输线路,
并发送响应信号ack=x+3给服务端,服务端收到客户端发送的响应信号并与暗号景象比对,比对成功,得到服务端到客户端的数据传输路线已经关闭的信息.
等到客户端也成功传输了所有数据,客户端发送关闭客服端到服务端的数据传输路线的请求fin和暗号seq=y+1,服务端收到请求,发送响应信号ack=y+2给客户端,并关闭了客户端到服务端的
数据传输路线,客户端收到响应信号ack并拿他与暗号进行比对,比对成功,的到客户端到服务端色数据数据传输线路以关闭的信息.
注意:因为fin_wait1/2都是在很快色时间内完成的,而time_wait则会等待一段时间,如果time_wait等待的时间较长,则很大可能表明有很多用户在使用服务端.
半连接池:由于建连接时,只能一条条请求的来,有客户端对服务端发送了请求,吓一跳客户就会相似等待,因此有了半连接池,他的工作原理是在客户端请求成功被服务端接手后,服务端不会马上对该请求
发出响应,只要把这些请求存进半链接池内,只要半链接池没有满,客户端的请求就会进入服务端,如果半链接池满了,那么请求也会被阻拦在外面显示等待,而且半连接池会通过服务端响应最早进入
的客户端请求,达到泄洪的目的
注意:半连接池限制的同同一时间的客户端请求数,而非连接数
2、为何tcp协议是可靠协议,而udp协议是不可靠协议?????
tcp协议是可靠协议又称好人协议,tcp需要先建立链接,tcp发送数据到客户端口需要等到客户端返还回来,过程可能发生网络断开等原因,只有接受到成功的反馈才会清除数据.
优点.传输数据安全,可靠. 缺点 效率低下
UDP协议 :传输数据不用建立链接,找到客户端的端口就丢过去,数据发送完毕就清楚数据,不管客户端是否完全接收
优点;效率高, 缺点:客户端没接受到信息就把服务端数据清除掉了
4、标识地址的方式:
ip+mac就能标识全世界范围内独一无二的一台计算机
ip+mac+port就能标识全世界范围内独一无二的一个基于网络通信的应用软件
url地址:标识全世界范围内独一无二的一个资源
5、tcp协议建立连接与断开连接的状态信息以及表示的意义
----------------------------------------------------------------------------------------------------------------------------end--------------------------------------------------------------------------------------------
CLOSED:表示关闭状态(初始状态)。
LISTEN:该状态表示服务器端的某个SOCKET处于监听状态,可以接受连接。
SYN_SENT:这个状态与SYN_RCVD遥相呼应,当客户端SOCKET执行CONNECT连接时,它首先发送SYN报文,随即进入到了SYN_SENT状态,并等待服务端的发送三次握手中的第2个报文。SYN_SENT状态表示客户端已发送SYN报文。
SYN_RCVD: 该状态表示接收到SYN报文,在正常情况下,这个状态是服务器端的SOCKET在建立TCP连接时的三次握手会话过程中的一个中间状态,很短暂。此种状态时,当收到客户端的ACK报文后,会进入到ESTABLISHED状态。
ESTABLISHED:表示连接已经建立。
FIN_WAIT_1: FIN_WAIT_1和FIN_WAIT_2状态的真正含义都是表示等待对方的FIN报文。区别是: FIN_WAIT_1状态是当socket在ESTABLISHED状态时,想主动关闭连接,向对方发送了FIN报文,此时该socket进入到FIN_WAIT_1状态。 FIN_WAIT_2状态是当对方回应ACK后,该socket进入到FIN_WAIT_2状态,正常情况下,对方应马上回应ACK报文,所以FIN_WAIT_1状态一般较难见到,而FIN_WAIT_2状态可用netstat看到。
FIN_WAIT_2:主动关闭链接的一方,发出FIN收到ACK以后进入该状态。称之为半连接或半关闭状态。该状态下的socket只能接收数据,不能发。
TIME_WAIT: 表示收到了对方的FIN报文,并发送出了ACK报文,等2MSL后即可回到CLOSED可用状态。如果FIN_WAIT_1状态下,收到对方同时带 FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态。
CLOSE_WAIT: 此种状态表示在等待关闭。当对方关闭一个SOCKET后发送FIN报文给自己,系统会回应一个ACK报文给对方,此时则进入到CLOSE_WAIT状态。接下来呢,察看是否还有数据发送给对方,如果没有可以 close这个SOCKET,发送FIN报文给对方,即关闭连接。所以在CLOSE_WAIT状态下,需要关闭连接。
LAST_ACK: 该状态是被动关闭一方在发送FIN报文后,最后等待对方的ACK报文。当收到ACK报文后,即可以进入到CLOSED可用状态。
tcp第十一种状态:
CLOSING:这种状态较特殊,属于一种较罕见的状态。正常情况下,当你发送FIN报文后,按理来说是应该先收到(或同时收到)对方的ACK报文,再收到对方的FIN报文。但是CLOSING状态表示你发送FIN报文后,并没有收到对方的ACK报文,反而却也收到了对方的FIN报文。什么情况下会出现此种情况呢?如果双方几乎在同时close一个SOCKET的话,那么就出现了双方同时发送FIN报文的情况,也即会出现CLOSING状态,表示双方都正在关闭SOCKET连接。
LISTEN:该状态表示服务器端的某个SOCKET处于监听状态,可以接受连接。
SYN_SENT:这个状态与SYN_RCVD遥相呼应,当客户端SOCKET执行CONNECT连接时,它首先发送SYN报文,随即进入到了SYN_SENT状态,并等待服务端的发送三次握手中的第2个报文。SYN_SENT状态表示客户端已发送SYN报文。
SYN_RCVD: 该状态表示接收到SYN报文,在正常情况下,这个状态是服务器端的SOCKET在建立TCP连接时的三次握手会话过程中的一个中间状态,很短暂。此种状态时,当收到客户端的ACK报文后,会进入到ESTABLISHED状态。
ESTABLISHED:表示连接已经建立。
FIN_WAIT_1: FIN_WAIT_1和FIN_WAIT_2状态的真正含义都是表示等待对方的FIN报文。区别是: FIN_WAIT_1状态是当socket在ESTABLISHED状态时,想主动关闭连接,向对方发送了FIN报文,此时该socket进入到FIN_WAIT_1状态。 FIN_WAIT_2状态是当对方回应ACK后,该socket进入到FIN_WAIT_2状态,正常情况下,对方应马上回应ACK报文,所以FIN_WAIT_1状态一般较难见到,而FIN_WAIT_2状态可用netstat看到。
FIN_WAIT_2:主动关闭链接的一方,发出FIN收到ACK以后进入该状态。称之为半连接或半关闭状态。该状态下的socket只能接收数据,不能发。
TIME_WAIT: 表示收到了对方的FIN报文,并发送出了ACK报文,等2MSL后即可回到CLOSED可用状态。如果FIN_WAIT_1状态下,收到对方同时带 FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态。
CLOSE_WAIT: 此种状态表示在等待关闭。当对方关闭一个SOCKET后发送FIN报文给自己,系统会回应一个ACK报文给对方,此时则进入到CLOSE_WAIT状态。接下来呢,察看是否还有数据发送给对方,如果没有可以 close这个SOCKET,发送FIN报文给对方,即关闭连接。所以在CLOSE_WAIT状态下,需要关闭连接。
LAST_ACK: 该状态是被动关闭一方在发送FIN报文后,最后等待对方的ACK报文。当收到ACK报文后,即可以进入到CLOSED可用状态。
tcp第十一种状态:
CLOSING:这种状态较特殊,属于一种较罕见的状态。正常情况下,当你发送FIN报文后,按理来说是应该先收到(或同时收到)对方的ACK报文,再收到对方的FIN报文。但是CLOSING状态表示你发送FIN报文后,并没有收到对方的ACK报文,反而却也收到了对方的FIN报文。什么情况下会出现此种情况呢?如果双方几乎在同时close一个SOCKET的话,那么就出现了双方同时发送FIN报文的情况,也即会出现CLOSING状态,表示双方都正在关闭SOCKET连接。
以上是关于02,网络编程的主要内容,如果未能解决你的问题,请参考以下文章
Python网络编程02/基于TCP协议的socket简单的通信