- 3
- 0
- 约5.06千字
- 约 7页
- 2024-07-13 发布于上海
- 举报
实验四 嵌入式Linux中的网络通信一.实验目的
掌握Linux中网络通信的基本知识
理解网络通信中服务器端、客户端的工作过程
能够在Linux中进行网络通信编程
二.实验内容
网络通信的基本知识
Linux中网络通信编程
三.实验步骤
1.TCP/IP概述
TCP/IP的分层模型
OSI协议参考模型,它是基于国际标准化组织(ISO)的建议发展起来的,它分为7个层次:应用层、表示层、会话层、传输层、网络层、数据链路层及物理层。这个7层的协议模型虽然规定得非常细致和完善,但在实际中却得不到广泛的应用,其重要的原因之一就在于它过于复杂。但它仍是此后很多协议模型的基础。与此相区别的TCP/IP协议模型将OSI的7层协议模型简化为4层,从而更有利于实现和使用。
TCP/IP的协议参考模型和OSI协议参考模型的对应关系如下图:
应用层表示层应用层会话层传输层传输层网络层
应用层
表示层
应用层
会话层
传输层
传输层
网络层
网络层
数据链路层
网络接口层
物理层
TCP/IP核心协议
SYNJ
SYNK,ACKJ+1
ACKK+1
三次握手
TCP是面向连接的,所谓面向连接,就是当计算机双方通信时必需先建立连接,然后进行数据通信,最后拆除连接三个过程。TCP在建立连接时又分三步走:
第一步(A-B):主机A向主机B发送一个包含SYN即同步
(Synchronize)标志的TCP报文,SYN同步报文会指明客户端使用的端口以及TCP连接的初始序号;
第二步(B-A):主机B在收到客户端的SYN报文后,将返回一个
SYN+ACK的报文,表示主机B的请求被接受,同时TCP序号被加一,
ACK即确认(Acknowledgement)。
第三步(A-B):主机A也返回一个确认报文ACK给服务器端,同样TCP序列号被加一,到此一个TCP连接完成。
套接字(socket)概述
套接字类型
流式套接字(SOCK_STREAM)
流式套接字提供可靠的、面向连接的通信流;它使用TCP协议,从而保证了数据传输的可靠性和顺序性。
数据报套接字(SOCK_DGRAM)
数据报套接字定义了一种无可靠、面向无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证是可靠、无差错的。它使用数据报协议UDP
原始套接字(SOCK_RAW)
原始套接字允许对底层协议如IP或ICMP进行直接访问,它功能强大但使用较为不便,主要用于一些协议的开发。
地址及顺序处理地址结构处理
structsockaddr
{
unsignedshortsa_family;/*地址族*/
charsa_data[14];/*14字节的协议地址,包含该socket的IP地址和端口号。*/
};
structsockaddr_in
{
shortintsa_family;/*地址族*/unsignedshortintsin_port;/*端口号*/
structin_addrsin_addr;/*IP地址*/
unsignedcharsin_zero[8];/*填充0以保持与structsockaddr同样大小*/
};
这两个数据类型是等效的,可以相互转化,通常sockaddr_in数据类型使用更为方便。
在建立socketadd或sockaddr_in后,就可以对该socket进行适当的操作了。
套接字编程
函数说明
socket() 创建套接字
bind() 绑定本机端口
connect() 建立连接
listen() 监听端口
accept() 接受连接
recv(),read(),recvfrom() 数据接收
send(),write(),sendto() 数据发送
close(),shutdown() 关闭套接字
使用TCP时Socket编程
socketsocket
socket
socket
bind
bind
listen
accept
connect
recv/recvfrom
send/sendto
send/sendto
recv/recvfrom
close
close
使用UDP时Socket编程
socket
socket
socket
listen
accept
connect
recvfrom
或
recv
send
或
sendto
sendto
或
send
recv
或
recvfrom
close
close
四.实验代码分析
1.分析下面代码完成的工作A服务器端代码
/*server.
原创力文档

文档评论(0)