1. 网络数据传输时需要考虑字节序问题,即大端小端问题:
x86系列CPU都是little-endian的字节序.
网络字节顺序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释。网络字节顺序采用big endian排序方式。
为了进行转换 bsd socket提供了转换的函数 有下面四个
htons 把unsigned short类型从主机序转换到网络序
htonl 把unsigned long类型从主机序转换到网络序
ntohs 把unsigned short类型从网络序转换到主机序
ntohl 把unsigned long类型从网络序转换到主机序
在使用little endian的系统中 这些函数会把字节序进行转换。
在发送数据之前将主机序转换为网络序,在接收到数据后需要将网络序转换为主机序。
2. 设置路由器虚拟服务器实现外网向内网发送数据包
外网向内网发送的数据包目的IP为路由器IP,路由器根据数据包的目的端口将数据包转发给内网主机。
3.内网和外网通讯
内网先向外网独立IP发送一个TCP报文,路由器会在此时自动建立一个NAT映射,将内网IP和端口号同WAN口IP和端口号对应并缓存,缓存更新时间貌似是50s。其后外网独立IP向内网发报文时,目的IP采用内网所在的路由器WAN口IP,端口还是路由器的映射端口,就可以通信了。
UDP试了,不行。
时间: 2024-10-29 03:56:38