前言
TCP、UDP套接字编程
一、Socket编程
应用进程使用传输层提供的服务才能够交换报文,实现应用协议,实现应用
- TCP/IP:应用进程使用Socket API访问传输服务
- 地点:界面上的SAP(Socket)方式:Socket API
- 目标:学习如何构建能借助sockets进行通信的C/S应用程序
- socket:分布式应用进程之间的门,传输层协议提供的端到端服务接口
2种传输层服务的socket类型:
- TCP:可靠的、字节流的服务
- UDP:不可靠(数据UDP数据报)服务
二、TCP套接字编程
- 套接字:应用进程与端到端传输协议(TCP或UDP)之间的门户
- TCP服务:从一个进程向另一个进程可靠地传输字节流
服务器首先运行,等待连接建立
- 1:服务器进程必须先处于运行状态
- 创建欢迎socket
- 和本地端口捆绑
- 在欢迎socket上阻塞式等待接收用户的连接
客户端主动和服务器建立连接:
- 2:创建客户端本地套接字(隐式捆绑到本地port)
- 指定服务器进程的P地址和端口号,与服务器进程连接
- 4:连接API调用有效时,客户端P与服务器建立了TCP连接
- 3:当与客户端连接请求到来时
- 服务器接受来自用户端的请求,解除阻塞式等待,返回一个新的socket(与欢迎socket不一样),与客户端通信
- 允许服务器与多个客户端通信
- 使用源IP和源端口来区分不同的客户端
从应用程序的角度
- TCP在客户端和服务器进程之间提供了可靠的、字节流(管道)服务
TCP Socket编程
C/S模式的应用样例:
- 1)客户端从标准输入装置读取一行字符,发送给服务器
- 2)服务器从socket读取字符
- 3)服务器将字符转换成大写,然后返回给客户端
- 4)客户端从socket中读取一行字符,然后打印出
- 实际上,这里描述了C-S之间交互的动作次序
三、UDP套字编程
- UDP:在客户端和服务器之间没有连接
- 没有握手
- 发送端在每一个报文中明确地指定目标的IP地址和端口号
- 服务器必须从收到的分组中提取出发送端的IP地址和端口号
- UDP:传送的数据可能乱序,也可能丢失
- 进程视角看UDP服务
- UDP为客户端和服务器提供不可靠的字节组的传送服务
总结
- 应用程序体系结构
- 客户-服务器
- P2P
- 混合
- 应用程序需要的服务品质描述:
- 可靠性、带宽、延时、安全
- Internet传输层服务模式
- 可靠的、面向连接的服务:TCP
- 不可靠的数据报:UDP
- 流行的应用层协议:
- HTTP
- FTP
- SMTP,POP,IMAP
- DNS
- Socket编程
- 应用层协议报文类型:请求/响应报文:
- 客户端请求信息或服务
- 服务器以数据、状态码进行响应
- 报文格式:
- 首部:关于数据信息的字段
- 数据:被交换的信息
- 控制报文vs.数据报文
- 带内、带外
- 集中式vs.分散式
- 无状态vs.维护状态
- 可靠的vs.不可靠的报文传输
- 在网络边缘处理复杂性
一个协议定义了在两个或多个通信实体之间交换报文的格式和次序、以及就一条报文传输和接收或其他事件采取的动作