TCP/IP网络编程的预备知识
1.Socket简介
- 是一个编程接口,系统内核提供的系统调用,代表着网络变成的一种资源。
- 是一种特殊的文件描述符(everything in Unix is a file),所以可以使用文件io的部分函数。
- 并不仅限于TCP/IP协议。
- 面向连接(Transmission Control Protocol-TCP/IP)。
- 无连接(User Datagram Protocol-UDP和Inter-network Packet Exchange-IPX)
2.Socket的类型
流武套接字(SOCKSTREAM):唯一对应着TCP
提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复的发送直按发送顺序接收。内设置流量控制,避免数据流淹没慢的接收方。数据被看作是字节流,无长度限制。数据报套接字(SOCKDGRAM):唯一对应着UDP
提供无连接服务。数据包以独立数据包的形式被发送,不提供无差错保证,数据可能丢失或重复,顺序发送,可能乱序接收。原始套接字(SOCK RAW):对应着多个协议
可以对较低层次协议如IP、ICMP直接访问。
原始套接字跨过了传输层,直接工作在网络层:

3.IP地址
IP地址是Internet中主机的标识
Internet中的主机要与别的机器通信必须具有一个IP地址。IP地址为32位(IPv4)或者128位(IPv6)。
每个数据包都必须携带目的IP地址和源IP地址,路由器依靠此信息为数据包选择路由。表示形式:常用点分形式,如202. 38.64.10,最后都会转换为一个32位的无符号整数。
IP地址分类。
局域网IP: 192. XXx.XXx.XXX 10. XXx.XXX.XXX
广播IP: xxx. Xx.xx. 25, 255.25.255. 255全网广播)
组播IP: 224.Xxx.Xx.XXX.39. xx.xxxxxxxx
- 子网掩码。
mobileIPV6: 针对手机等移动的网络,设备注册网络分配local IP(本地册的IP)和 和基站传输用的roam IP (漫游IP或临时IP),举例:当设备从一个城市到另一个城市会切换基站,所以ipv4地址一定会改变,mobileIPV6地址的话local IP不会变注册网络分配保存在本地的,roam IP会变因基站切换了,所以还可以通过local IP找到这个设备。
4.端口号
为了区分一台主机接收到的数据包应该转交给哪个任务来进行处理,使用端
口号来区别。TCP端口号与UDP端口号独立。
端口号一般由IANA (Internet Assigned Numbers Authority)管理
1.众所周知端口: 1 ~ 1023 (1 ~ 255之间为众所周知端口, 256 ~ 1023端口通常由UNIX系统占用),FTP:21,SSH:22,HTTP:80,HTTPS:469
2.保留端口: 1024 ~ 5000(不建议使用)
3.可以使用的:5000 ~ 655354.16位数据(1 ~ 65535)
5.TCP和UDP的端口是相互独立的,例如:两个进程分别采用TCP和UDP而且端口号都是5000。
网络通信是由:IP地址(哪台机器) + 端口号(机器的哪个任务)
网络应用编程掌握:
网卡驱动编程掌握:
网络数据解析到网络层后发往传输层的各种走向:
5.字节序
- 网络中传输的数据必须按网络字节序,即大端字节序
- 在大部分PC机(cpu是小端模式),当进程将整数送入socket前,需要转化成网络字节序(大端);当进程从sockert取整数后,要转换成小端字节序。
- 网络中传输一个整数有字节序之分,因为整数占四个字节,而如果传输的是字符串则没有字节序之分,因为每个字符只占一个字节。
linux提供的字节序转换函数:
1 | //主机字节序到网络字节序 |
IP地址转换函数:
1 | in addr_t inet_addr (const char *cp); |
1 |
|
- 本文作者: 龙兄嵌入式
- 本文链接: https://hexo.880755.xyz/1970/01/01/zblog/download/53.TCP_IP网络编程的预备知识/


