网络编程基础-----(1~2)

1

网络分层思想:

.每一层实现不同的功能,对上册的数据做透明传输。
.每一层实现不同的功能,对上册的数据做透明传输。

## 各层典型的协议:

###1.网络接口与物理层#
MAC地址: 48位全球唯一,网络设备的身份标识
ARP/RARP:
ARP:IP地-----MAC地址
RARP:MAC地--->IP地址
PPP协议: 拨号协议《GP/3G/4G)
###2.网络层(IP地址): Intemnet protocol(分为IPV4和IPV6)
ICMP:Internet控制管理协议,ping命令属于ICMP
IGMP: Internet分组管理协议,广播、组播
3.传输层
TCP:提供面向连接的,一对一的可靠数据传输的协议。即数据无误、数据无丢失、数据无失序、数据无重复到达的通信。
UDP:提供不可靠,无连接的尽力传输协议。在数据发送前,因为不需要进行连接,所以可以进行高效率的数据传输。
STCP:时可靠传输,是TCP的增强版,它能实现多主机、多链路的通信。
4.应用层:
网页访问协议:HTTP/HTTPS
邮件发送接收协议: POP3(收)/SMTP(发)、IMAP (可接收邮件的一部分)
FTP.
Telnet/SSH: 远程登录
嵌入式相关:
NTP:网络时钟协议
SNMP:简单网络管理协议 (实现对网络设备集中式管理)
RTP/RTSP:用传输音视频的协议 (安防监控)
5.网络的封包和拆包:


## TCP/IP网络编程预备知识

       默认阻塞

socket编程--网络IO编程

-读写操作

-read/write

        文件描述符

创建一个套接字,得到是文件描述符

1.创建成功,得到一个文件描述符fd

2.fd操作的是一个内核缓冲区

流程

一、服务端

1.创建套接字

socket tcp server

        创建套接字

        int lfd = socket

2.绑定本地IP和端口

 struct socketaddr_in_serv;

serv.port = htons(port);

serv.IP = htonl(INADDR_ANY);

bind(lfd,&serv,sizeof(serv));

3.监听

listen(lfd,128); 

4.等待并接收连接请求

struct sockaddr_in client;

int len = sizeof(client);

int cfd = accpet(lfd,&client,&len);

 cfd ---用于通信的

5.通信

接收数据:read/recv

发送数据:write/send

6.关闭

close(lfd)

close(cfd)

客户端

 创建套接字

        int fd = socket

  连接服务器

客户端

1.创建套接字

 int fd = socket

2.连接服务器

struct  socketaddr_in server;

server.port

server.ip = (int )???
server.family

connect(fd,&server,sizeof(server));

3.通信

接收数据:read/recv

发送数据:write/send

4.断开连接

1.socket
是一个编程接口,它是一种特殊的文件描述符(对它执行IO的操作函数,比如read(),write(),close()等操作描述符)
流式套接字(SOCK_STREAM): 唯一对应着TCP提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复的发送且按发送顺序接收。内设置流量控制,避免数据流淹没慢的接收方。数据被看作是字节流,无长度限制。
数据报套接字(SOCK DGRAM): 唯一对应着UDP提供无连接服务。数据包以独立数据包的形式被发送,不提供无差错保证,数据可能丢失或重复,顺序发送,可能乱序接收。(对应着多个协议,发送穿透了传输层)
原始套接字(SOCK RAW)可以对较低层次协议如IP、ICMP直接访问。
2.IP地址
IP地址分为IPV4和IPV6 
IPV4:采用32为整数表示
IPV6:采用128位整数来表示
mobileIPV6: local IP本地注册的IP,roamIP(漫游IP)
IPV4地址:
   点分形式:192.168.7.246
   32位整数
3.端口号  16位数字(1-65535)
为了区别一台主机接收到的数据包应该转交给那个任务,使用端口号来区别。
TCP端口和UDP端口是相互独立的。
网络里面的通信是由IP地址+端口号  决定的
4.字节序
 概念:不同类型的CPU的主机中,内存存储多字节整数序列有两种方法成为主机字节序(HBO)
小端序 (little-endian)- 低序字节存储,将低字节存储在起始地址,称为“little-Endian"学节序,Intel、AMD等
- 大端序 (big-endian)- 高序字节存储在低地址,将高字节存储在起始地址,称为“Big-Endian”学节序,由ARM、Motorola
网络中传输的数据必须按网络字节序,即大端字节序
字节序是指不同的CPU访问内存中的多字节数据的时候,存在大小端问题。
字节序是指不同的CPU访问内存中的多字节数据时候,存在大小端问题
如CPU访问的是字符串,则不存在大小端问题

IP地址转换函数

in_addr_t inet_addr(const char *cp)

cp:点分形式的IP地址,结果是32位整数(内部包含了字节序的转换,默认是网络字节序的模式)

特点:1.仅适应与IPV4

           2.当出错时,返回-1.

           3.此函数不能用于255.255.255.255转换

inet_pton()/inet_ntop()

特点:1.适应于IPV4和IPV6

           2.能正确处理255.255.255.255的转换问题

  • 20
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值