一.计算机网络概述-笔记

 分层结构

七层分层结构: 从下向上(第一层:物理层,第七层:应用层)

四层结构: 从下向上(第一层:链路层,第四层:应用层)

 TCP协议简介

TCP是一种面向连接的,可靠的传输通信协议

主要功能: 提供不同主机上的进程间通信(端对端)

特点

1,建立链接->使用链接->释放连接(虚电路)

2,TCP数据包中包含序号和确认序号

3,对包进行排序并检错,而损坏的包可以被重传

服务对象

需要高度可靠性且面向连接的服务

如HTTP,FTP,SMTP,MQTT等

建立连接时的三次握手: 

1, C->SYN        2, S->SYN+ACK        3, C->ACK

释放链接时的四次挥手:

1, C->FIN        2, S-ACK         3, S-FIN        4, C->ACK 

 UDP协议简介

UDP 是一种面向无连接的传输层通信协议.

功能: 提供不同主机上的进程间通信(端到端的)

特点:

        1,发送数据之前不需要建立链接

        2,不对数据包的顺序进行检查

        3,没有错误检测和重传机制

服务对象

        主要用于"查询--应答"的服务

        如: NFS,NTP,DNS等

NTP: 网络时间协议        DNS: 域名系统

IP地址

IP地址是一种Internet 上的主机编址方式,也称为网际协议地址. 

 IP地址组成:

        使用32bit,由{网络ID,主机ID}两部分组成

子网ID(网络ID): IP地址中由子网掩码中1覆盖的连续位

主机ID: IP地址中由子网掩码中0覆盖的连续位

 字节序的转换函数

#include <arpa/inet.h>

发送者调用的函数

//将32位的主机字节序转换成网络字节序

uint32_t htonl(uint32_t hostlong);        //转IP

//将16位主机字节转换成主机字节序

uint16_t htons(uint16_t hostshort);        //转端口

接受者调用函数

//将32位的网络字节序转换成主机字节序

unint32_t ntohl(uint32_t netlong);        //转IP

//将16位的网络字节序转换成主机字节序

uint16_t ntohs(uint16_t netshort);        //转端口

 IP地址转换函数

#include <arpa/inet.h>

inet_pton函数

功能: 字符串ip地址转整型数据,即将点分十进制数串转换成32位无符号整数

int inet_pton(int af, const char *src, void *dst);

参数:

af:转换的协议:

        AF_INET(IPV4)

        AF_INET6(IPV6)

src: 点分十进制数串的首元素地址

dst:4字节的IP地址

 inet_ntop函数

功能:整型数据转字符串格式ip地址

const char *inet_ntop(int af, const void *src, char *dst, socklen_t size);

参数:

af: 转换的协议,如AF_INET(IPV4)        AF_INET6(IPV6)

src: 4字节的IP地址的起始地址

dst: 存放点分十进制数串的起始地址

size: 点分十进制数串的最大长度

        #define INET_ADDRSTRLEN 16 //for ipv4

        #define INET_ADDRSTRLEN 46 //for ipv

返回值: 成功则返回字符串的首地址;失败则返回NULL

创建UDP套接字

创建一个用于网络通信的socket套接字(描述符)

int socket(int family, int type, int protocol)

参数:

family:协议族(AF_INET,AF_IVET6,PF_PACKET等)

type:套接字类(SOCK_STREAM,SOCK_DGRAM.SOCK_RAM,SOCK_RAW等),

UDP的为SOCK_DGRAM.

SOCK_STREAM为TCP的.

protocol:协议类别(0,IPPROTO_TCP,IPPRPTP_UDP等),一般采用0

返回值: 成功:套接字, 失败:-1.

特点:创建套接字时,系统不会分配端口.

[扩展]:使用完套接字后,可以通过close()函数关闭.

 地址结构

#include <netinet/in.h>

IPV4地址结构struct sockaddr_in

[扩展] inet_addr("ipv4的地址")转化为in_addr_t的网络ip数值

发送数据-sendto函数

需要知道对方的ip和端口号

ssize_t sendto(int sockfd, const void *buf,size_t nbytes, int flags, const struct sockaddr *to,socklen_t addrlen);

功能:向to结构体指针中指定的ip,发送UDP数据报

参数:

        sockfd: 套接字

        buf: 发送数据缓冲区

        nbytes: 发送数据缓冲区的大小

        flags: 一般为0

        to: 指向目的主机地址结构体的指针

        addrlen: to所指向内容的长度

注意:

        通过to 和addrlen 确定目的地址

        udp可以发送0长度的UDP数据包

返回值: 成功:发送数据的字符数组; 失败:-1;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值