前两篇文章给大家打了一下些计算机网络的基础:
OSI七层模型与TCP/IP网络体系详解,网络编程入门一定要先了解
TCP和UDP协议还没搞懂?5分钟带你快速理解并掌握这两个协议
今天主要给大家梳理一下我们在网络编程经常使用的socket以及IP地址和端口号的定义,希望能让大家加深对socket的理解。
什么是Socket
独立于具体协议的网络编程接口
在OSI模型中主要位于会话层和传输层之间
Socket的类型:
流式套接字(SOCK_STREAM)TCP
提供一个面向连接、可靠的数据传输服务,数据无差错、无重复发送并按顺序抵达。内设流量控制,避免数据流淹没前面的数据。数据被查看时字节流,无长度限制。
数据报套接字(SOCK_DGRAM)UDP
提供无连接服务,数据包以独立数据包形式被发送,不提供无差错保证,数据有可能丢失或重复到达,顺序发送可能会乱序接收
原始套接字(SOCK_RAW)
可以直接访问较低层次的协议例如IP\ICMP。
什么是IP地址?
IP地址是网络中主机(电脑)的标识
在网络中主机想要与其他机器通信就必须拥有一个自己的IP地址
IP地址为32位(IPV4)或者位(IPV6)
每一个数据包都必须携带目的地址IP和源IP地址,路由器依靠此信息为数据包选择最优路由(路线)
什么事端口号(PORT)?
用于区分一台主机中接收到的数据包应该转交给哪一个进程进行处理。
TCP端口号与UDP端口号是相互独立的
端口号一般由IANA(InternetAssignedNumbersAuthority)统一管理
众所周知端口:1-(1-25之间为众所周知的端口,-为UNIX系统占用)
何为总所周知端口其实就是早已固定号的端口比如80端口分配给WWW服务,21端口分配给FTP服务等
注册端口:-分配给进程或者应用。这些端口号在还没有被服务器资源占用时,可以由用户的APP动态注册获得。
动态端口号:-被称为动态端口号一般不固定分配某种服务而是动态分配的。一般可以使用以上的就可以随便用
加上这篇文章和之前的两篇,我们已经成功地把计算机网络传输的基础知识梳理了一遍,从开始就开始给大家介绍一下怎么用一些相关的API进行网络数据的传输,感兴趣的朋友可以