17_1网络编程基础.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux网络编程基础 主讲教师:文全刚 wen_sir_125@163.com 内容提要 网络基础知识 Socket编程 网络基础知识 TCP/IP参考模型 TCP/IP协议族 TCP/UDP TCP/IP TCP/UDP 字段含义(1) (1)源端口和目的端口 各2个字节,表示源和目的端口号。 (2)发送序号 4字节,指出报文中数据在发送方的数据流中的位置(以字节编号)。 (3)确认序号 4字节,指接收方希望下一次接收的字节序号。 (4)TCP头长 4比特,指出以32比特为单位的报文头部长度。该域是针对变长的“选项”域设计的。 (5)紧急标志位URG(URGent) 当URG=1时,表明此报文是紧急数据,应尽快传送出去。 字段含义(2) (6)确认标志位ACK 只有当ACK=1时确认序号字段才有意义。当ACK=0时,确认序号没有意义。 (7)急迫标志位PSH(PuSH) 当PSH=1时,请求远地TCP软件将该报文立即送给应用程序。 (8)重建标志位RST(ReSeT) 当RST=1时,表明出现严重差错,必须释放连接,然后重新建立连接。 (9)同步标志位SYN, 当SYN=1而ACK=0时,表明这是一个建立连接请求报文,若对方同意建立该连接,则应在发回的报文中使将SYN和ACK标志位同时置1。 字段含义(3) (10)终止标志位FIN(FINal) 当FIN=1时,表明数据已经发送完毕,并请求释放连接。 (11)窗口 2字节。该字段实际上是接收方告诉发送方它的接收窗口大小,其单位为字节。窗口域主要是用于流量控制和拥塞控制。 (12)校验和 2字节。校验和字段检验的范围包括TCP报文的头部和数据区这两部分。 (13)可选项 长度可变。TCP只规定了一种选项,即最长报文段MSS(Maximum Segment Size)。 Socket编程 Socket概述 地址及顺序处理 Socket基础编程 思考题 TCP和UDP有何区别 阅读ping源码 基本套接口函数(6) #include sys/socket.h int recvfrom(int sockfd, void * buf, int len, int flags, struct sockaddr * from, unsigned int *addrlen); int sendto(int sockfd, const void * msg, int len, int flags, const struct sockaddr * to, unsigned int addrlen); 与TCP不同的是, UDP在通信时, 系统内部不记录套接口地址信息, 都是函数中主动以参数的形式指明的. 在TCP情况下, 客户connect成功后(服务器accept成功后), 每次发送接收都只需指定套接口描述符就行了, 但是这里每次发送接收都需要额外附加上对方的套接口地址信息. 基本套接口函数(7)- 其它 #include unistd.h int read( int fd, char *buf, int len); 返回实际接收的缓冲区大小 int write(int fd, char *buf, int len); 返回实际发送的缓冲区大小 int close(int sockfd); int closesocket(int sockfd); 成功返回0, 否则返回-1 还有一些其他的发送接收函数, 感兴趣者可以查阅帮助 TCP通信- 服务器例子 int fd; /* 套接口描述符 */ struct sockaddr_in srv; /* 套接口地址结构 */ fd = socket(AF_INET, SOCK_STREAM, 0) /* AF_INET表示使用Internet地址族 */ srv.sin_family = AF_INET; /* 将socket绑定到 80 号端口 */ srv.sin_port = htons(80); /* bind: INADDR_ANY 表示服务器将接收来自本机上任何一块网卡的客户连接 */ srv.sin_addr.s_addr = htonl(INADDR_ANY); if(bind(fd, (struct sockaddr*) srv, sizeof(srv)) 0) { fprintf(stderr, ”bind error!\n); exit(1); } if(listen(fd, 5) 0) { fprintf(std

文档评论(0)

hong333666 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档