1.socket简介

游戏开发中最常用的便是socket,socket本质是api,是对tcp/ip的封装。tcp/ip协议族是一个网络通信模型以及一系列网络传输协议,为互联网的基础通信架构。

tcp/ip网络模型分为四层:应用层、传输层、网络层、网络接口层。下面的表格是tcp/ip模型和osi模型的对比。

  

tcp/ip osi
应用层
应用层
表示层
会话层
传输层 传输层
网络层 网络层
网络接口层(又称链路层)
数据链路层
物理层

最上面是应用层,里面包含了http,ftp等协议。

第二层是传输层,提供应用程序间的通信,tcp和udp就属于这一层,socket是应用层与传输层之间的同一个抽象层。

接下来的便是网络层,负责计算机之间的通信,将数据加上ip地址选择去往目标的路径。包括ip、icmp控制报文协议等。

最下层是网络接口层,又称为链路层。负责接收ip数据包并通过网络发送,或者从网络上接收物理帧,抽出ip数据包,交给ip层。

socket其实是一种特殊的文件,一些函数对其进行读写操作。

socket的tcp连接流程如上图所示,udp连接则不需要建立连接。

2.socket接口函数

以c#为例,介绍socket的基本函数。

2.1.socket()函数

Socket(AddressFamily family, SocketType type, ProtocolType proto)

AddressFamily 地址族,决定了socket的地址类型
SocketType socket类型,包括Stream、Dgram、Raw、Rdm、Seqpacket。
ProtocolType socket使用的协议类型,常见的有tcp,udp。

2.2.bind()函数

Bind( EndPoint localEP )

EndPoint是表示ip+端口

2.3.listen()、connect()函数

Listen(int backlog)

backlog是socket可以排队的最大连接个数

Connect(IPAddress address, int port)//有多个重载函数

IPAddress表示地址,port表示端口

2.4.accept()函数

Socket Accept()//有多个重载函数

accept会返回一个新的套接字用来与客户端收发消息,绑定监听的套接字是另一个。

2.5.send和receive

send和receive有多个重载函数,可以理解为用于读取写入和读取套接字数据缓冲区 。

2.6.close()函数

void Close()//有多个重载函数
在服务器与客户端建立连接之后,会进行一些读写操作,完成了读写操作就要关闭相应的socket描述字,好比操作完打开的文件要调用fclose关闭打开的文件。

3.tcp和udp的区别

tcp  udp
连接 无连接
可靠 不可靠
面向字节流 面向报文
首部复杂20字节 首部简单8字节
传输速度慢 传输速度快

tcp和udp的主要区别如上图所示

3.1tcp和udp的头部结构

tcp头部结构

源端口号 目的端口号
数据序列号
确认序列号
偏移 保留 6个标志位 窗口大小                
校验和 紧急指针
可选项
数据

6个标志位
URG-紧急指针有效
ACK-确认序号有效
PSH-接收方应尽快将这个报文交给应用层
RST-连接重置
SYN-同步序号用来发起一个连接
FIN-终止一个连接

udp头部结构

源端口 目的端口
数据长度 校验和   
数据

(1)16位源端口号,记录源端口号,在需要对方回信时选用。不需要时可用全0。
(2)16位目的端口号,记录目标端口号。这在终点交付报文时必须要使用到。
(3)数据长度 UDP数据报的长度(包括数据和首部),其最小值为8B(即仅有首部没有数据的情况)。
(4)校验和,检测UDP数据报在传输中是否有错,有错就丢弃。

3.2tcp的三次握手

第一次握手,客户端发送一个SYN包(序列号为x),进入SYN_SEND状态,等待服务器确认。

第二次握手,服务器收到SYN包需要返回一个ACK包(确认序列号为x+1),并且发送一个SYN包(序列号为y),此时服务器为SYN_RECV状态。

第三次握手,客户端收到服务器的ACK+SYN包,向服务器发送一个ACK包(确认序列号为y+1),客户端和服务器进入ESTABLISHED状态,连接正式建立。

3.3tcp的四次挥手

4.http的介绍

http协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是建立在tcp协议之上的一种应用。

http的特点包括:

1.无连接,服务器处理完客户的请求,并收到客户的应答后,即断开连接。

2.无状态,无状态是指协议对于事务处理没有记忆能力。

3.灵活,允许传输任意类型的数据。

4.1http的消息结构

http请求报文结构,依次为:请求行、请求头、空行、请求数据。如下图:

请求方法  空格 URL 空格 协议版本 回车符 换行符
头部字段名 回车符 换行符
......
头部字段名: 回车符 换行符
回车符 换行符
请求数据

http响应报文结构,依次为:状态行、响应头、空行、响应数据。如下图:

协议版本  空格 状态码 空格 解释状态码的原因短语 回车符 换行符
头部字段名 回车符 换行符
......
头部字段名: 回车符 换行符
回车符 换行符
响应数据

4.2http的请求方法

GET 请求指定的页面信息,并返回实体主体。
POST 用来传输实体的主体。
HEAD 和GET类似,不过不返回报文的主体,只返回头部。
PUT 从客户端向服务器传送的数据取代指定的文档的内容。
DELETE 指明客户端想让服务器删除某个资源,与PUT方法相反。
CONNECT

CONNECT方法要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。

主要使用SSL(安全套接层)和TLS(传输层安全)协议把通信内容加密后经网络隧道传输。

OPTIONS 用来查询针对请求URL指定的资源支持的方法。

socket、http、udp、tcp的整理的更多相关文章

  1. 【Windows socket+IP+UDP+TCP】网络基础

    Windows Socket+网络      Winsock是 Windows下套接字标准.          Winsock 编程分为UDP[Windows socket + UDP],TCP[Wi ...

  2. Python Socket Programming UDP/TCP

    基于UDP/TCP的套接字编程demo UDP 客户端/服务器 一个简单的基于UDP协议的客户端和服务器应用的进程通信. 逻辑: 客户端会给服务器发送小写的英文字母,服务器接受后,把它转化成大写再返回 ...

  3. 初识-----基于Socket的UDP和TCP编程及测试代码

    一.概述 TCP(传输控制协议)和UDP(用户数据报协议是网络体系结构TCP/IP模型中传输层一层中的两个不同的通信协议. TCP:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节流 ...

  4. 基于Socket的UDP和TCP编程介绍

    一.概述 TCP(传输控制协议)和UDP(用户数据报协议是网络体系结构TCP/IP模型中传输层一层中的两个不同的通信协议. TCP:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节流 ...

  5. JAVA之旅(三十二)——JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用

    JAVA之旅(三十二)--JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用 GUI写到一半电脑系统挂了,也就算了,最多GUI还有一个提示框和实例, ...

  6. socket通讯,TCP,UDP,HTTP的区别

    socket编程有TCP和UDP, TCP:传送控制协议(Transmission Control Protocol) 传输控制协议TCP是TCP/IP协议栈中的传输层协议,它通过序列确认以及包重发机 ...

  7. javase的网络编程(InetAddress,UDP,TCP,URL,Socket,DatagramSocket)

    通过一段时间对java网络编程相关内容的学习,写下这篇随笔,对这一部分的知识进行梳理和总结. 网络编程 一.网络编程三要素: IP地址:网络会给每个联网的主机分配一个数字的编码地址,该地址就是IP地址 ...

  8. Java Socket实现基于TCP和UDP多线程通信

    一.通过Socket实现TCP编程 1.1 TCP编程 TCP协议是面向连接,可靠的,有序的,以字节流的方式发送数据.基于TCP协议实现网络通信的类有客户端的Socket类和服务器端的ServerSo ...

  9. socket 、 udp 和 tcp

    强调一点: socket . udp . tcp之间的区别. socket只是一种套接字,就是两台电脑两端的东西,中间传输以流的格式进行.  IBEO好像是TCP/IP ,  无论对于TCP和UDP, ...

  10. 计算机网络(十三),Socket编程实现TCP和UDP

    十三.Socket编程实现TCP和UDP 1.TCP (1)TCPServer.java类 package com.interview.javabasic.socket; import com.int ...

随机推荐

  1. excel求和结果不对

    excel求和结果不对 Excel求和功能是excel中最常用的功能,但是很多时候会碰到各种错误,比如求和结果总是0.公式求和结果和用计算器敲出来的结果不一样.更新了数据但是求和结果没有变等等.本经验 ...

  2. SSM项目整合第一步 注册登陆实现

    SSM项目整合第一步  注册: 项目目录: 一.数据库建表: 源码: ; -- ---------------------------- -- Table structure for t_user - ...

  3. activiti工作流-概述

    1       应用场景 1.1 业务流程 采购系统完成了企业的日常采购管理,包括采购单管理.采购单审核.入库.结算等模块. 用户角色包括:员工.部门经理.总经理.财务. 基本业务流程如下: 1.2  ...

  4. 微软的可疑更新DhMachineSvc.exe

    最近微软大范围的推出了一个只针对中国的更新,包含了DhMachineSvc.exe,也就是所谓的'微软设备健康助手服务'. 这个更新很神秘,首先这个更新只针对中国区,其次这个更新支持WinXP,第三这 ...

  5. python基础十三之内置函数

    内置函数 操作字符串代码 eval和exec print(eval('1+2')) # 简单的计算 有返回值 exec('for i in range(10):print(i)') # 简单的流程控制 ...

  6. 【js】vue 2.5.1 源码学习 (七) 初始化之 initState 响应式系统基本思路

    大体思路(六) 本节内容: 一.生命周期的钩子函数的实现 ==> callHook(vm , 'beforeCreate') beforeCreate 实例创建之后 事件数据还未创建 二.初始化 ...

  7. C# 程序集数量对软件启动性能的影响

    本文通过很多的数据测试分析在一个项目引用很多个外部项目和将外部项目的类合并到一个项目之间的启动性能的不同. 通过分析知道了如果一个项目引用了很多项目,而且在启动过程会全部调用这些项目,这时的软件性能会 ...

  8. ajaxStart()和ajaxStop()方法

    使用ajaxSetup()方法设置全局Ajax默认选项 使用ajaxSetup()方法可以设置Ajax请求的一些全局性选项值,设置完成后,后面的Ajax请求将不需要再添加这些选项值,它的调用格式为: ...

  9. HttpRepl 互操作的 RESTful HTTP 服务调试命令行工具

    今天早上曽根セイラ告诉我一个好用的工具 HttpRepl 这是一个可以在命令行里面对 RESTful 的 HTTP 服务进行路由跳转和访问的命令行工具.可以使用 cd 这个命令和像文件跳转已经跳转到下 ...

  10. CP防火墙配置NAT

    Static NAT配置 Step1:创建host对象并且配置static NAT,如下图: Step2:修改全局属性的NAT项的ARP代理选项,勾选即可,如下图: Step3:在网关的web por ...