计算机网络

  一.基础概念

1.网络

a.概念:把独立自主的主机连接起来就构成了一个网络。

b.目的:进行资源共享 ,信息交互。

c.网络设备:交换机(2层设备)       路由器(3层设备)

d.传输介质:双绞线,光纤,同轴电缆,无线

2.互联网(被称为网络的网络)

a.概念:将网络和网络连接起来就构成了互联网(不是互连网)。

b.特点:共享性(资源)和连通性,虚拟性

3.协议

a.概念:控制两个对等实体或多个实体进行通信的规则的集合。(网络规则的集合    规则   约定  共同遵守的标准)

b.简单描述:面向链接  可靠的流式服务;  

c.五层协议体系结构:应用层      运输层(最重要的协议时TCP和UDP协议)      网络层(最重要的协议是IP协议)     数据链路层和物理层。

4.IP地址

a.概念:给互联网上的每一台主机或路由器的每一个接口分配一个在全世界范围内是唯一的32位的标识符。(在网络中唯一标识一台计算机)

b.编址方法:

A类地址         0 | 网络号(8位)        主机号(24位)

b.1.分类的IP地址            B类地址        10 | 网络号(16位)      主机号(16位)

                                                       C类地址      110 | 网络号(24位)      主机号(8位)

b.2.子网的划分。       b.3.构成超网

c.构成方式:由网络号和主机号构成,网络号相同,则在同一个网络中

        d.MAC地址     固化到网卡设备中,唯一标识主机。

5.子网掩码

计算是否在同一个网络中。

6.端口号(标识应用程序)

作用:ip标识一台主机,端口在该主机上标识一个进程

7.网络分层

OSI              应用层    表示层    会话层    传输层    网络层     数据链路层    物理层

         tcp/ip         应用层     传输层    网络层    数据链路层

二,函数及其参数说明

1.int sockfd = socket(AF_INET,SOCK_STREAM,0); //创建套接字    在内核中分配资源     返回值为一个套接字文件描述符sockfd

SOCK_STREAM      流失套接字tcp           (数据报    udp)  

AF_INET                 协议地址族 ipv4  

0                             一般为固定写法


struct sockaddr_in saddr,caddr; //ipv4


2.int res = bind(sockfd,(struct sockaddr*)&saddr,sizeof(saddr)); //命名套接字(绑定)ip和端口在网络中唯一标识一个进程

struct sockaddr_in{

sin_family;                        AF_INET;

sin_port;                           0---1023   知名端口号,root才有权限使用;1024---4096保留端口号;4096以上为临时端口号,可以使用。

sin_addr.s_addr              ip地址,需要inet_addr()把一个点分十进制的字符串转为无符号整形,且为网络序列;

};

htons      主机转网络短整形         htonl     主机转网络长整形

     (对端口号做转换,要求在网络上传的整形必须是大端,并将大端称为网络字节序列)

ntohs      网络转主机短整形        ntohl      网络转主机长整形

3.listen(sockfd,5);  //将当前套接字转换为被动监听的套接字,并为其设置监听队列。

【5】为队列长度   (以前是上下两个队列之和。现在是仅标识已完成三次握手的队列的最大长度)


TCP      特点:面向链接;    体现:通过三次握手完成连接的建立

4.int c=accept(sockfd,(struct sockaddr *)&caddr,&len);//c  叫连接套接字,代表和客户端的连接,从c上读数据就是接受客户端发过来的信息,向c上写数据,就是给客户端发送消息(****和客户端通信用的是c,而不是sockfd(监听套接字))

caddr    其中包含客户端的信息。eg: IP,端口。

accept    接受连接,盯着已完成的三次握手的队列看。若为空,则阻塞;若不为空,则处理返回c。

5.char buff[128] = {0};       recv(c,buff,127,0);      //c为套接字,对应一格客户端,如果接受了多个客户端,就会有多个c。

buff     存放数据的地点;   127   期望接受的字节数,可能实际接收的会比期望的少

【n】为返回值,表示实际接收到的字节数(n>0   实际收到这么多,没有数据将会阻塞;n=0   对方关闭了该连接; n<0   出错);

6.send(c,"ok",2,0); //发送数据,返回值是实际发送的字节数

【2】 是期望发送的字节数。 【OK】待发送

# 一个套接字有两个缓冲区    1.接受缓冲区  2。发送缓冲区

send成功,说明把数据发送到发送缓冲区  

7.int  res = connect(sockfd,(struct sockaddr*)&saddr,sizeof(saddr));  //发起连接  三次握手从此开始,连接的对象就是saddr中的

# IP 和端口号所标识的进程。可能失败,原因:1.IP不存在,或端口没打开;

res = -1  失败;若成功,则意味三次握手已经完成。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值