网络体系结构
TCP/IP网络体系结构:
描述的是消息发出去的一种过程,应用程序如何收到消息,发送到内核中,通过网卡传输到网线上
1.应用层
HTTP FTP
传输层 最重要的数据:端口(区分不同服务标识PC机上运行的指定协议) 2字节(2Bytes) 16字节(16bits) 2^16 = 0~65535
TCP:有链接,可靠(保证对方收到)
难点:接收方自行区分消息包(TCP消息为 无字节流,一长串数据),如何区分粘包
UDP:无连接,不保证可靠,无发送缓冲区,有接收缓冲区
拓展:QQ使用的传输协议?
登录时,TCP协议,发消息使用UDP协议
用户端1-->Tencent Server-->用户端2
需要经过腾讯服务器(监管,保证数据健康性)
而快播当时采用的是用户端直接与用户端通信的方式,不经过服务器
网络层:最重要的数据是IP地址 标识自己
IP地址分类:A B C D E
IP ospf等
IPV4:Internetworking Protocol Version 4 网络之间互联的协议
4字节(4Bytes) = 32位(32bits) = 2^32
IPV6:16字节 = 128位
数据链路层:最重要的数据是网卡的MAC地址
MAC地址:网卡硬件地址、网卡物理地址
注意的是:不是全球唯一的、但是同一个网段要求MAC地址唯一。
ARP协议:把IP地址转换成MAC地址
RARP协议:把MAC地址转换成IP地址
以太网属于链路层协议
数据封装与传递:发送数据每经过一层都需要加上对应的报头,接收方每解析一层,去掉相应的报头发送数据每经过一层都需要加上对应的报头,接收方每解析一层,去掉相应的报头
IP header:20字节
TCP header:20字节
UDP header:8字节
业务层的角度:网络编程也叫套接字编程
2. 网络体系结构的概念?每一个分为几层?
引入:数据传输的过程模拟成寄快递的过程
描述用户数据通过应用程序到内核,内核到网卡,再到网线这么一个传输过程
OSI:open system interconnect 开放系统互联模型
应用层、表示层、会话层、传输层、网络层、数据链路层、物理层
TCP/IP协议族体系结构:
应用层、传输层、网络层、数据链路层、物理层
3. 掌握大端字节序和小端字节序,以及写代码判断
4. 掌握简单的tcp服务器
TCP/IP网络编程预备知识:
4.1.Socket
通用的网络编程接口,特殊的文件描述符
普通的IO操作
类型:
a.流式套接字(SOCK_STREAM) --------TCP协议
每个流式套接字都有自己的发送缓冲区与接收缓冲区
b.数据报套接字(SOCK_DGRAM)--------UDP协议
c.原始套接字(SOCK_RAW) ----------ping命令(跨越传输层)
4.2.IP地址
分类:
版本:
子网掩码:
IP地址转换:
人类看的:点分十进制IP地址
计算机识别:32位网络字节序二进制形式
e.g. 192.168.0.2
192<<24 + 168<<16 + 0<8 + 2
系统调用函数:
inet_aton()
inet_addr()
inet_ntoa()
4.3.端口号(区分不同服务)
4.4.字节序
主机字节序:
1.大端序:
2.小端序:
网络字节序:大端字节序(网络发送时使用)
使用统一字节序,避免兼容性问题
应用进程将整数送入socket前,需要转化成网络字节序
应用进程从socket取出整数后,需要转化成小端字节序
5. 使用telnet命令模拟客户端
查看端口是否被用:lsof -i :端口号
查看服务及固定端口:vi /etc/services
使用方法:telnet ip地址 端口
退出telnet :ctrl键+] ,然后quit就退出了
练习
1:写程序判断大小端:定义一个整数,定义一个字符指针指向这个整数,再进行判断
2:与10.110.12.29,子网掩码为255.255.255.224处于同一网段的是()
A 10.110.12.0
B 10.110.12.30
C 10.110.12.31
d 10.110.12.32
子网掩码:255.255.255.224
11111111 11111111 11111111 11100000
子网号: 10.110.12.29
& 00001010 01101110 00001100 00011101
= 00001010 01101110 00001100 00000000
10.110.12. 0
只考虑点分十进制IP地址最后8位
最后一位为0,广播?
1:网关
255:?
Netmask: 11100000
& 选项B 30 :00011110 = 0
& 选项C 31 :00011111 = 0
& 选项D 32 :00100000 =00100000 (不符合)
3:服务器收到ls命令,将当前目录下的目录项发送给客户端
如果不是ls命令,则将字符串回显