1、Linux/Unix网络编程,信息工程学院,2,网络编程,时间安排 上课:30学时 实验 10学时 参考教材 网络编程与分层协议设计.刘飚 . 机工出版社 Linux/Unix网络编程.甘刚 .水利水电出版社 用TCP/IP进行网际互联. 第一卷 用TCP/IP进行网际互联. 第三卷 Douglas E.Comer 电子工业出版社,3,先修课程,C语言 数据结构 计算机网络 操作系统 Linux的基本使用,第1章 TCP/IP网络编程基础,5,客户机/服务器编程模型,Server程序,Client程序,active open connection,6,循环式服务器,客户机/服务器编程模型,C,
2、S,1、数据请求,2、数据响应,无连接,3、数据请求,4、数据响应,1、连接请求,2、连接响应,5、关闭请求,6、关闭响应,C,S,8,并发式服务器,客户机/服务器编程模型,10,循环式 vs. 并发服务器,绑定地址,监听连接,接收连接,处理连接,断开连接,接收请求,处理请求,返回响应,绑定地址,监听连接,接收连接,创建子进程,关闭连接套接字,处理连接,关闭连接套接字,终止子进程,关闭监听套接字,服务器主进程,服务器子进程,TCP循环式服务器,TCP并发服务器,11,TCPIP互联网,,IE浏览器,QQ,QQ,OSI 与 TCP/IP,13,TCPIP网络协议栈,传输层(TCP, UDP),网
3、络层(IP),数据链路层(Ethernet, ),物理层,应用层(HTTP, FTP, SMTP, ),网络编程接口,15,IP地址和端口,源IP、源端口、目的IP和目的端口,eg. WEB服务器和客户端间的数据传输过程,UDP:用户数据报协议,UDP提供无连接服务 UDP缺乏可靠性支持,应用程序必须实现:确认、超时、重传、流控等 UDP面向记录服务,UDP数据报格式,源端口,目的端口,长度,校验和,数据,0,15,31,#ifdef _FAVOR_BSD struct udphdr u_int16_t uh_sport; /* source port */u_int16_t uh_dport
4、; /* destination port */u_int16_t uh_ulen; /* udp length */u_int16_t uh_sum; /* udp checksum */ ; #else struct udphdr u_int16_t source;u_int16_t dest;u_int16_t len;u_int16_t check; ; #endif,TCP:传输控制协议,TCP是面向连接的。 TCP提供可靠性,实现了丢失重传。 TCP通过给所发送数据的每一个段管理一个序列号进行排序。 TCP提供流量控制和拥塞控制。 TCP的连接是全双工的。,TCP协议数据段格式,T
5、CP协议数据段格式(续),struct tcphdr WORD SourPort; WORD DestPort; DWORD SeqNo; DWORD AckNo; BYTE HLen; BYTE Flag; WORD Window; WORD ChkSum; WORD UrgPtr; /* Put options here. */ ;,TCP协议数据段格式(续),几个需要说明的字段 HLEN:首部长度,以4字节(32位)为单位。tcp数据段首部包括固定和变长两部分; 窗口:为通告窗口; URG位:如果使用紧急数据指针,则将这一位设为1 ACK位:如果确认序列号有效,则设为1; PSH位:表示
6、”推”数据,如果这一位设置成1,表示希望接收方在接收到这个数据段之后,将它立即传送给高层应用程序,而不是缓存起来。,TCP协议数据段格式(续),RST位:表示请求重置连接。当TCP协议接收到一个不能处理的数据段时,向对方TCP协议发送这种数据段,表示这个数据段所标识的连接出现了某种错误,请求对方TCP协议将这个连接清除。有3种情况可能导致TCP协议发送RST数据段(1)SYN数据段指定的目的端口处没有接收进程等待;(2)TCP协议想放弃一个已经存在的连接;(3)TCP接收到一个数据段,但是这个数据段所标识的连接不存在。接收到RST数据段的TCP协议立即将这条连接非正常断开,并向应用程序报告;,
7、TCP协议数据段格式(续),SYN位:请求建立连接。tcp用这种数据段向对方tcp协议请求建立连接,在这个数据段中,tcp协议将它选择的初始序列号通知对方,并且与对方协议协商最大数据段的大小。 FIN位:请求关闭连接。当协议收到对这个数据段的确认后,成功关闭写方向的连接,因为tcp连接是全双工的,在发送了FIN数据段之后,它仍能接收数据,直至对方也发送FIN数据段。 紧急指针:如果设置了URG位,这个字段指出紧急数据相对于这个数据段的开始序列号的偏移量。tcp协议只提供一字节的紧急数据,但由于历史原因,紧急指针指向紧急数据的下一个位置。,TCP三次握手,客户,服务器,Socket Connec
8、t(阻塞) (主动打开),Socket,bind,listen (被动打开),SYN x,SYN y, ack x+1,ack y+1,Accept返回 Read阻塞,Connect返回,TCP连接的建立,TCP连接的过程: 服务器必须准备好接受外来的连接。通过调用socket, bind, listen函数完成。称为被动打开。 客户通过调用connect进行主动打开。这引起客户TCP发送一个SYN分节,告诉服务器客户将在连接中发送的数据的初始序列号。 服务器必须确认客户的SYN,同时自己也得发送一个SYN分节。服务器以单个分节向客户发送SYN和对客户的SYN的ACK。 客户必须确认服务器的SYN。,TCP连接关闭,客户,服务器,Close 主动关闭,被动关闭 Read返回0,FIN M,ack N+1,Close,ack M+1,FIN N,TCP连接终止,TCP一般用四个分节终止一个连接: 某个进程首先调用close, 这一端的TCP于是发送一个FIN分节,表示数据发送完毕。主动关闭。 另一端称为被动关闭。TCP对接收的FIN分节进行确认,并以文件结束标志传递给应用程序。 一段时间后,接收到文件结束标志的应用程序调用close,这也导致向对方发送一个FIN分节。 接收到这个FIN分节的原发送方TCP对它进行确认。,