1.ip地址 2.port 3.网络字节序 4.浅层次tcp和udp区别 5.udp协议实现网络通信 6.tcp协议实现网络通信
1.ip地址
a.作用:在网络中唯一标识一台主机
b.本质:uint32_t 无符号4个字节
c.源ip和目的ip地址
5元组 = 源ip+源端口+目的ip+目的端口+协议
ipv6:a.ipv4和ipv6制的不同版本的ip协议
b.ipv6并不兼容ipv4,两者的ip协议的报头格式不同
c.ipv6 16个字节
2.port
a.端口在一台主机中表示一个进程
b.本质:uint16_t 范围65535
c.知名端口:0-1023 mysql--3306 oracle--1521 ssh--20 http--80
d.网络通信的时候双方都需要端口
3.网络字节序
字节序:CPU对内存当中的数据进行存取的顺序
大端字节序:低地址存放高位
小端字节序:低地址存放低位
网络字节序:大端字节序进行传输;网络标准
小端字节序转换成网络字节序:
uint32_t htonl(uint32_t hostlong)
uint32_t ntohl(uint32_t netlong)
uint16_t htons(uint16_t hostshort)
uint16_t ntohs(uint16_t netshort)
#include <iostream>
#include <stdio.h>
int main()
{
union Data
{
int a;
char b;
}data;
//0x00000001
data.a = 1;
if(data.b == 1)
{
printf("小端\n");
}
else
{
printf("大端\n");
}
return 0;
}
4.浅层次tcp和udp区别
TCP
面向连接:tcp的通信双方在发送数据之前,需要先建立连接,才可以发送数据
可靠传输:保证TCP数据包可靠到达对端
面向字节流:对于TCP数据可以任意存取
UDP
无连接:UDP通信双方在发送数据之前,不需要建立连接,只需要知道对方的ip和port就可以直接发送数据
不可靠:如果UDP数据在网络当中传输的时候,丢失掉了,则不会保证udp数据一定到达对端
面向数据包:UDP在发送数据的时候,是整条发送整条接收的
5.udp协议实现网络通信
UDP套接字流程接口
服务端:
1.创建套接字:将进程和网卡建立连接
2.绑定地址信息:将端口和进程联系起来;绑定IP地址+Port
3.接收数据
4.发送数据
5.关闭套接字
客户端( client):
1.创建套接字
2绑定地址信息(不推荐在客户端绑定地址信息, 1.操作系统会帮我们绑定地址信息2.如果绑定地址信息,也就是意味着固定客户端的端口了,由于端口不能同时被多个进程所占用。当前机器就只能启动一个客户端程序了; )
3.发送数据
4.接收数据
5.关闭套接字
接口:
1.创建套接字的接口
int socket(int domain, int type, int protocol)
domain:地址域,传入协议的版本
网络层: AF_ _INT-->ipv4版本的ip协议
AF_ INET6-->ipv6版本的ip协议
type:套接字的类型
传输层: tcp/udp ;
tcp : SOCK STREAM:流式套接字;默认的协议就是tcp ,不支持udp的
udp: SOCK DGRAM:数据报套接字;默认读的协议就是udp ,不支持tcp的protocol:协议
0 :采用套接字默认协议
tcp: IPPROTO _TCP(6)
udp:IPPROTO_ UDP(17)
返回值:
返回套接字的操作句柄,其实就是-一个文件描述符; - -般称之为套接字描述符
2.绑定地址信息
int bind(int sockfd, const struct sockaddr* addr, socklen. _t addrlen)
sockfd:套接字操作句柄。
addr:
struct sockaddr
{
sa_ family. _t sa. _fa