第一次写博客
纪录一下自己开始学着写博客,以后会将自己学习到的东西和遇到的难题及解决方案也给写进去,文采太烂了,要是哪里写的不好或者是有错误还请大佬留言提出来,我发现会在第一时间进行修改,互相学习,希望能提高自己的能力。
网络通信概述
- 引入;
如果没有网络,就不能快速的将信息发送给对方; - 什么是网络;
网络就是一种辅助双方或者多方能够连接在一起的工具; - 使用网络的目的;
就是为了联通多方然后进行通信用的,即把数据从一方传递给另外一方
前面的学习编写的程序都是单机的,即不能和其他电脑上的程序进行通信
为了让在不同的电脑上运行的软件,之间能够互相传递数据,就需要借助网络的功能; - 小总结;
使用网络能够把多方链接在一起,然后可以进行数据传递
所谓的网络编程就是,让在不同的电脑上的软件能够进行数据传递,即进程之间的通信
UTP
用户数据报协议,是一个简单的面向数据报的运输层协议。
特点:
-
面向无连接(UDP在传输数据报前不用在客户端和服务端之间建议连接);
-
每个数据包大小限制在64k内(UTP发送数据是将数据分解成多个包进行发送);
-
UTP不提供可靠性(因为是面向无连接);
-
传输速度快(因为不需要建立连接);
TCP
传输控制协议,提供是面向连接,可靠的字节流服务。
特点:
-
当客户端与服务端进行交互数据前,必须先在彼此之间建立 一个TCP连接,之后再传输数据。
-
TCP提供可靠性,提供数据超时重发,筛选丢弃重复数据,检验数据,流量控制等功能。
-
注意点
-
TCP服务器一般情况下都需要绑定,否则客户端找不到这个服务器
-
TCP客户端一般不绑定,因为是主动链接服务器,所以只要确定好服务器的ip、port等信息就好,本地客户端可以随机
-
TCP服务器中通过listen可以将socket创建出来的主动套接字变为被动的,这是做TCP服务器时必须要做的
-
当客户端需要链接服务器时,就需要使用connect进行链接,UDP是不需要链接的而是直接发送,但是TCP必须先链接,只有链接成功才能通信
-
当一个TCP客户端连接服务器时,服务器端会有1个新的套接字,这个套接字用来标记这个客户端,单独为这个客户端服务
-
listen后的套接字是被动套接字,用来接收新的客户端的链接请求的,而accept返回的新套接字是标记这个新客户端的
-
关闭listen后的套接字意味着被动套接字关闭了,会导致新的客户端不能够链接服务器,但是之前已经链接成功的客户端正常通信。
-
关闭accept返回的套接字意味着这个客户端已经服务完毕
-
当客户端的套接字调用close后,服务器端会recv解堵塞,并且返回的长度为0,因此服务器可以通过返回数据的长度来区别客户端是否已经下线
-
TCP的三次握手
-
tcp是稳定可靠的传送方式,在接收、发送之前,双方需要建立一个虚拟的通道,这个过程称为3次握手
-
3次握手的流程是:
-
客户端调用connect时发送一个带有标号的数据,我们把建立连接时的第1次数据叫做(SYN)其中有1个数字,例如1
-
服务器的接收到这个数据,然后回送一个 数据,这个数据中 有2个部分 SYN+ACK
- ACK是对接收到的数据的确认,此时的数值为2
- SYN表示要向客户端发送的数据,例如可以是3
- tcp是稳定可靠的传送方式,在接收、发送之前,双方需要建立一个虚拟的通道,这个过程称为3次握手
-