传输层
通过端口号标记进程解决进程间通信的问题,不然电脑分辨不出来
netstat –ano 查看所有进程和端口号
传输层服务通过传输层协议的编程接口传递给应用进程。该服务可以包括以下功能:
连接导向式通信:通常对于一个应用进程来说,连接等于数据流。
相同次序交付:网络层通常不保证数据包到达顺序与发送顺序相同,但这往往是一个可取的特点。这通常是通过给报文段编号来完成的,接收者按次序将它们传给应用进程。这可能会造成队头阻塞。
可靠性:由于网络拥塞和错误,数据包可能在传输过程中丢失。通过检错码(如校验和),传输协议可以检查数据是否损坏,并通过向发送者传ACK或NACK消息确认正确接收。自动重发请求方案可用于重新传输丢失或损坏的数据。
流量控制:有时必须控制两个节点之间的数据传输速率以阻止快速的发送者传输超出接收缓冲器所能承受的数据,造成缓冲区溢出。这也可以通过减少缓冲区不足来提高效率。
拥塞避免:拥塞控制可以控制进入到电信网络的流量。
多路复用:端口可以在单个节点上提供多个端点。例如,邮政地址的名称是一种多路复用,并区分同一位置的不同收件人。每个计算机应用进程会监听它们自己的端口,这使得在同一时间可以使用多个网络服务。
TCP协议:面向连接、可靠、基于字节流
三次握手
传输过程
流量控制:通过滑动窗口避免主机分组发送得过快而使接收方来不及完全收下,一般由接收方通告给发送方进行调控。
拥塞控制:发送方与接收方根据确认包或者包丢失的情况,以及定时器,估计网络拥塞情况,从而修改数据流的行为。TCP的现代实现包含四种相互影响的拥塞控制算法:慢开始、拥塞避免、快速重传、快速恢复。
四次挥手
UDP协议: 无连接、非可靠、基于数据包
许多关键的互联网应用程序使用UDP,包括:DNS,DHCP(用于动态分配IP地址);
Python Socket
TCP server:
TCP client:
UDP server:
UDP client:
result:
服务端套接字函数:
s.bind() 绑定(主机,端口号)到套接字
s.listen() 开始TCP监听
s.accept() 被动接受TCP客户的连接,(阻塞式)等待连接的到来
客户端套接字函数:
s.connect() 主动初始化TCP服务器连接
s.connect_ex() connect()函数的扩展版本,出错时返回出错码,而不是抛出异常
公共用途的套接字函数:
s.recv() 接收TCP数据
s.send() 发送TCP数据
s.sendall() 发送TCP数据
s.recvfrom() 接收UDP数据
s.sendto() 发送UDP数据
s.getpeername() 连接到当前套接字的远端的地址
s.getsockname() 当前套接字的地址
s.getsockopt() 返回指定套接字的参数
s.setsockopt() 设置指定套接字的参数
s.close() 关闭套接字
面向锁的套接字方法:
s.setblocking() 设置套接字的阻塞与非阻塞模式
s.settimeout() 设置阻塞套接字操作的超时时间
s.gettimeout() 得到阻塞套接字操作的超时时间
面向文件的套接字的函数:
s.fileno() 套接字的文件描述符
s.makefile() 创建一个与该套接字相关的文件