网络编程基础

基本概念:
客户端(Client):移动应用;
服务器(Server):为客户端提供服务,提供数据,提供资源的机器;
请求(Request):客户端向服务器索取数据的一种行为;
响应(Respinse):服务器对客户端的请求做出反映,一般指返回数据给客户端;

CS架构:客户端是程序和服务器组成;
BS架构:broswer 和 Web Server;

 客户端请求服务器端数据;
 服务器端对客户端的请求进行响应。

服务器:远程服务器 本地服务器;
计算机网络,七层网络协议:物理层->链路层->网络层->传输层->会话层->表示层->应用层。
网络通信很复杂,分层,每一层完成独立的事情,每一层向其上一层提供接口,层层调用。
没有特指哪一种协议栈。
现在互联网使用最多的协议tcp/ip协议。(现在网卡都支持tcp/ip,现在使用最为广泛的)
但是tcp/ip在实际实现的时候只实现了4层。(没有实现物理层是因为,有的有RP45接口,网线,主要是wifi实现的是2.4g赫兹的频率。)
在这里插入图片描述
链路层:最终解决的是一个点到点的通信,从链路层这个层次来讲,计算机和计算机之间是通过一条独立的通道来进行链接的。经常听说的Mac地址,实际上是属于链路层概念。以前宽带连接之前有一个拨号操作。拨号就是用了一个ppt(point to point),拨号实际上就是在两点之间确定一条通路。光纤也是拨号,只不过路由器完成了这个过程。

网络层:在我们整个互联网上,我们要把数据发送个另一个计算机,我们就需要知道这个计算的地址,在网络层非常重要的概念就是ip地址。家庭的ip地址一般是浮动的,企业的ip地址是固定的。

传输层:端口号的概念,在网络通信中,端口号就是用来表示某一个应用程序的id。端口号是介于0-65535之间的正整数。16位无符号整数。Ip地址确定是那一台计算机,而端口号确定哪一个应用程序接收数据。传输层就是为了解决数据的可靠传输。关于TCP,UDP:

TCP每次发送数据先连接,如果没有连接就先连接,导致速度慢,并且顺序传输(如果是一张照片,发送到国外,这个时候,因为照片比较大,不能一次性发送,所以要拆包(1500个字节)拆包之后,从一个地方到另外一个地方要经过不同的城市,不同的交换机不同的路由器,每个人走的路可能不一样,导致到达的时间也不一样,那就有可能造成网络数据的混乱,而TCP必须要求顺序,要求发送一个数据包之前保证上一个数据包确认收到,保证了安全可靠,但可能慢了。)网页一般用的TCP 传输网页时候不能将语法传错。
UDP主要是针对速度快的场合。比如说在线视频(速度快,效率高,但是不可靠,丢里几帧没关系。)

上面的复杂东西在做应用开发的时候,我们都不用管,因为这些都是在内核中实现的。协议TCP,IP和网卡都是现成的,这些都是LINUX系统已经搞定了的,留给我们的就是内核给我们提供的接口。为什么LINUX现在成了这么知名的操作系统,,大多数服务器都是用的Linux就是因为linux网络协议栈的设计非常好,开源而且还可以优化。

内核给应用层提供的接口统称为socket,socket是一个插头插座的意思,指的是进行网络通信导通的时候需要两个socket,然后连接就OK。

TCP通讯的流程图:
在这里插入图片描述
基于TCP通信要明确客户端还是服务器端;
Socket()函数:创建一个socket(类似于pipe创建出来有两个文件描述符)创建出来只有一个文件描述符。返回一个文件描述符。
Bind():绑定,绑定ip地址和端口号;(发送时候,每一层都进行打包,通过物理层发送出去。接收时候,一层一层解包)。
Listen (): 监听,服务器完成第一第二部就是初始化,之后要进入监听等待客户端的连接。
ACCEPT() 一旦监听成功,就可以调用ACCEPT函数,是一个阻塞型函数。作用就是等待客户端连接我们。如果没有客户端连接我,我就阻塞。如果客户端连接了我们就进行下一步(三次握手)
(Listen 宣布自己进入监听的状态,accept 执行这个动作 )

Connect(): 指定服务端在bind的的时候绑定的ip地址和端口号(客户端才可以和服务器端进行连接)

连接成功以后就是read write;

通信结束之后,双方都要去调用close(四次挥手);
TCP数据发送之前要进行连接,TC三次握手,四次挥手。
在这里插入图片描述
具体介绍每一个函数如何使用:man。。。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值