目录
1.OSI七层模型
2.TCP/IP五层(或四层)模型
3.网络传输基本流程
IP地址和MAC地址
网络传输基本流程
4.网络套接字编程
端口号
TCP协议
UDP协议
网络字节序
socket编程接口
sockaddr结构
物理层:光/电信号的传递方式.数据链路层:相邻设备之间数据帧传输,完成帧同步,差错控制,流量管理,链路管理网络层:地址管理与路由选择传输层:两端之间的数据传输会话层: 管理传输层以下的分层表示层: 网络标准数据格式的转换应用层:针对特定应用的协议如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问 协议(Telnet)DNS协议为域名解析协议,HTTP协议是超文本传输协议交换机在数据链路层,路由器在网络层
为什么要划分成为层状结构呢? a.场景复杂 b.功能解耦,便于人们进行各种维护
下一层为它的上一层进行服务
物理层我们考虑的比较少. 因此很多时候也可以称为 TCP/IP四层模型.
对于一台主机, 它的操作系统内核实现了从传输层到物理层的内容;对于一台路由器, 它实现了从网络层到物理层;对于一台交换机, 它实现了从数据链路层到物理层;对于集线器, 它只实现了物理层;ICMP报文通过(IP)协议来传输;
Mac地址就是工作在局域网的ip地址(局域网中表示主机的唯一性:MAC地址),在win和linux下分别可以使用ipconfig和ifconfig指令打印出MAC地址。而IP地址通常在广域网中使用,但实际上ip地址既可以在局域网中使用又可以在广域网中使用,但我们暂且不谈在局域网中的使用,只谈在广域网中。
一台计算机可以绑定多个网卡,进而可以拥有多个MAC地址。
IP地址应用于OSI第三层,即网络层,而MAC地址应用在OSI第二层,即数据链路层
同一个网段内的两台主机进行文件传输.
跨网段的主机的文件传输. 数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器
结论:
1.从上到下交付数据的时候,要添加报头。从下到上递交数据的时候,要去掉报头
2.封装的本质:添加报头 解包:去掉报头&&展开分析3.以太网是局域网的一种
4.在使用TCP/IP协议的网络中,IP及其向上的协议,看到的报文都是一样的。
5.不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链路层叫做帧(frame).
6.OSI的哪一层通常同时使用报头和报尾进行封装 数据链路层
一个进程可以绑定多个端口号; 但是一个端口号不能被多个进程绑定;
IP地址用于标识主机的唯一性,端口号用于标识主机上的对应网络通信socket
网络通信的本质实际就是进程间通信
应用层的socket API是一层抽象的网络编程接口,他适用于各种网络层协议,如IPV4,IPV6,然而各种网络协议的地址格式并不相同,例如Inet socket,Unix Domain socket的网络地址并不相同。所以为了解决这样的问题,搞出来了struct sockaddr结构体,定义好的struct sockaddr_in或struct sockaddr_un结构体指针可以直接赋值给struct sockaddr类型指针,相关函数内部会提取struct sockaddr结构体的前两个字节内容,如果前两个字节内容是AF_INET宏,那就在函数内部强转回struct sockaddr_in类型的指针,如果是AF_UNIX,那就在函数内部强转回struct sockaddr_un类型的指针。
其实这样的方式不就是C++的多态吗?用基类指针接收派生类对象指针
5.总结
IP地址+端口号port可以标识网络上的某一台主机的某一个进程(全网唯一)
TCP/UDP协议都是传输层的协议,其他特点不同:如UDP是不可靠的
套接字是一种网络通信的机制,IP+端口号port是套接字的形式,网络字节序列规定为大端,规定网络中的数据是大端的。
sockaddr使用统一的接口解决所有网络或者其他场景下的通信问题