在网络技术中,端口(Port)有好几种意思。集线器、交换机、路由 器的端口指的是链接其余网络设备的接口,如RJ-45端口、Serial端口等。咱们 这里所指的端口不是指物理意义上的端口,而是特指TCP/IP协议中的端口,是逻 辑意义上的端口。 服务器
那么TCP/IP协议中的端口指的是什么呢?若是把IP地址比做一间房子 ,端口就是出入这间房子的门。真正的房子只有几个门,可是一个IP地址的端口 能够有65536个之多!端口是经过端口号来标记的,端口号只有整数,范围是从0 到65535。 网络
端口有什么用呢?咱们知道,一台拥有IP地址的主机能够提供许多服 务,好比Web服务、FTP服务、SMTP服务等,这些服务彻底能够经过1个IP地址来 实现。那么,主机是怎样区分不一样的网络服务呢?显然不能只靠IP地址,由于IP 地址与网络服务的关系是一对多的关系。其实是经过“IP地址+端口号”来区 分不一样的服务的。框架
简言之:socket
---端口是为了将同一个电脑上的不一样程序进行隔离。ide
---端口是找电脑上的程序网站
---IP是找电脑spa
端口的范围:1-65535orm
系统经常使用1-1024视频
开发人员经常使用:8000/8001....blog
简单介绍OSI的分层、做用、封装
开发人员视角:本身代码+框架
应用层 |
使用软件。 |
打开软件或网站 |
表示层 |
看到数据,如图片和视频。 |
生产数据:szwwd |
会话层 |
保持登陆或连接状态。 |
应用偷偷携带一点其余数据:令牌 19rRNAwf8GVe6xyT9kJPIu5SlQc |
socket模块:
传输层 |
TCP/UDP |
[TCP][szwwd|19rRNAwf8GVe6xyT9kJPIu5SlQc] |
网络层 |
IP |
【IP】【[TCP][szwwd|19rRNAwf8GVe6xyT9kJPIu5SlQc]】 |
数据链路层 |
MAC |
[MAC][【IP】【[TCP][szwwd|19rRNAwf8GVe6xyT9kJPIu5SlQc]】] |
物理层 |
|
将数据转换成电信号发送 |
简单形象的介绍:
SYN_SENT:状态
client.connect((....))
客户端 |
服务端 |
我能打你吗 |
|
|
来呀来呀 |
好的,我这就来 |
|
client.send('发送数据')
收发数据 收发数据
client.close() 或 conn.close()
我要断开链接 |
|
|
断开就断开,等我处理一些手头的事情 |
|
... |
|
我处理完了,断开吧。 |
拜拜 |
|
三次握手:
数据传输完毕后,双方均可释放链接。最开始的时候,客户端和服务器都是处于ESTABLISHED状态,而后客户端主动关闭,服务器被动关闭。服务端也能够主动关闭,一个流程。
客户端进程发出链接释放报文,而且中止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即便不携带数据,也要消耗一个序号。服务器收到链接释放报文,发出确认报文,ACK=1,ack=u+1,而且带上本身的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,可是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送链接释放报文(在这以前还须要接受服务器发送的最后的数据)。服务器将最后的数据发送完毕后,就向客户端发送链接释放报文,FIN=1,ack=u+1,因为在半关闭状态,服务器极可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。客户端收到服务器的链接释放报文后,必须发出确认,ACK=1,ack=w+1,而本身的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP链接尚未释放,必须通过2∗∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。服务器只要收到了客户端发出的确认,当即进入CLOSED状态。一样,撤销TCB后,就结束了此次的TCP链接。能够看到,服务器结束TCP链接的时间要比客户端早一些。