当前课程知识点:互联网体系结构 > 第二周:Socket网络编程 > Socket接口 > Video
学习网络socket编程是我们绕不过去的几部分
所以我们就是
这次可能我们就是重点讲一下socket编程
我们看一下说什么是socket
对吧socket
它是独立于具体协议的网络编程接口
他在计算ISO模型中的就是ISO,OSI模型啊
他主要会于会话层和传输层之间
也就是我们那个TCP的四层
里边的就是传输层,传输层他和那个OSI模型
在相同那一层,BSD就是我们现在在Linux常用的套接字
就是BSD socket
现在通过这个标准的Unix
此文件描述符和其他的程序通信的一个方法
目前这个BSD socket已经被广泛运用
也成为了一个行业的标准
当然在Windows下我们用winsock它的接口会稍微有一点不一样
但是基本上他的就是编程的socket的编程的逻辑是一样的
他的指示函数函数名有点不一样
套接字
接着就是
OS操作系统叫文件描述符实现为一个指针
数组指向一个内部的数据结构进行进程
这个描述符表的
下标也就说
套接字描述符呢
和我们打开一个文件
open文件那文件描述符它实际上是在同一个表当中
只是那文件描述符的是用open来创建的
而就是socket的描述符呢
套接字描述符呢
是用socket函数来创建的
所以他们是同一个
这个是在内部的
就是管理上他是统一起来的
对于unix之类的系统都是这样
我们看一下这个
嗯就是socket叫做文件描述符表啊
在里边
那我们看就是他有0123按照标准标准输入标准输出
但是前面几个对吧
后面呢
我们就是程序可能会打开的一些文件或者是创建的socket都可能放在后面
他也就说一次的在一个进程
每个进程都有一个
文件描述符表啊
我们这边的我们可以看到这地方4号
四号文件描述符,他是一个socket描述符
他这里边呢
他指向了一个数据结构
这个数据结构里面的
他的family
就是他使用的就是PF
就是这个协议族
然后他服务
那是sock stream
这个待会儿我们讲他是流式的
又是TCP协议
还有他的就是地址和端口号
就是地址和端口的信息
这个套接字呢
他分主动套接字和被动套接字
他在就是使用方式有点不同
它的创建方式和使用方式有点不一样
等就是被动的呢
他是把socket打开在那儿等着一般是服务器
他开放
某一个端口啊
他在那儿等着
其它的客户端来连接
它是被动地提供服务
而主动的socket呢
他一般是客户端的他主动连接某一个服务是吧
他是主动的套接字
一般的就是那个被动的套接字呢
他都是用一个
就是他的端口号呢
都是有
就是就是试一试
之前的约定俗成的英语已经已经定义好的某一个套接字
比如说http
他是用八零端口的吧
但是这个大家都一般来讲都是用八零端口
对这套接字
而就是主动套接字呢
因为他的端口号呢
他是主动的
连接其他的
所以呢
他端口号往往是临时分配的
所以呢
他这个端口后往往就是比较大一点几千或者上万的端口号
这个端口号呢
就是他在使用时要指明这个IP地址和端口号
就相当于两个人互相通信
对吧
你要写信给对方
你要知道对方的地址和门牌号
对吧
哎就是你的
你写信寄过去
到时候你也要写上自己的地址和门牌号
所以呢
你在寄信之前
你一定要知道对方的对吧
所以他主动的呢
往往是就是一个一一个二就是主动的套接字客户端的往往就要知道服务端的
而服务端接到客户的信之后
那么他也知道了客户端的地址是IP地址和端口号
他所以他就能回信对吧
恩这边呢
我们这地方有两个
就是两个
也就说一个PF
就是他是协议族
而AF的就是互联网地址族,这两个呢
他在内部定义,它的值是一样的
但是它的含义有点不一样啊
一个是指协议族一个是指地址
我们看这个地址的结构
地址的结构
因为socket的它是一个通用的
就是接口类型
它不只是互联网TCP/IP用这个socket的,他还有其他的协议用socket所以呢
这个socket是相对比较通用的
他在定义地址的时候呢
它定义了一个通用的地址
而他定义的地址呢
就是sa
这个地址啊
他是用了一个14字节的一个结构
它没有明确的定义
它里面到底是什么对吧
而这次在这14个字节里面呢
对于TCP/IP来讲
他用socket internet
他把这14个字节
定义的更加明确了
对吧
没有明确的
2字节的端口号4字节的IPV4的地址还有8个就是zero
对吧
所以他这个地址来定义的是
IP专用也就把这14个字节给他具体化了
这两个我们就可以
可以看到就是有点像一个抽象类和具体类对吧
就我们学面向对象的是不是
他这是一种C语言的方法
也就是说
这一个句子结构体声明的变量
我们通过强制类型转换可以转换成这个是吧
这一个呢
我们俩也跟强制类型转换成这个他两个呢
有一个具体和一般的关系
socket的类型哈
我们一般来讲socket
我们最常用的是两种类型
就是我们在应用上最常用的是两种类型
一种是stream
stream它是提供一个面向连接的可靠的数据传输服务,就是我们在TCP/IP
我们就是TCP协议
它提供数据无差错
无重复的发送
而按照的发送的顺序来接收的那是流量控制
它避免这个流量拥塞等
他的这个数据能被看成是一个字节流
他说
他叫stream对吧
还有原来叫数据报套接字
套接字
在我们第三批协议里面
那种一般就是UDP协议
它提供无连接服务数据包
而以独立数据包的形式发送不提供无差错
保证数据可能丢失
就是重复或者是发送的顺序
就是传输的过程中会顺序混乱
这个的都需要应用层
比如说我UDP传出一个文件
那么你有一页PPT传
即接收这个文件的时候
你应用程序要进行
这个文件的校验
然后呢
还有原始套接字
原始套接字就是相对比较低层次的协议了
比如说就是IP、ICMP的
他就是你使用的是原始套接字这个
一般我们做应用的时候用的比较少
恩对Linux socket的
我们这地方跟他讲了不同的操作系统的socket的有点不一样
比如Windows的socket的是winsock
Linux他是BSD sock
也是一个unix
发行版定义的socket的接口
所以呢
立刻就沿用了这个BSD
这种unix接口
linux socket 他一般
要使用两个这个头文件
一个是systypes
一个是syssocket
它是函数定义
-课程内容简介
--Video
-网络协议基础
--Video
--Video
--Video
--Video
-上网浏览网页背后的网络通信过程
--Video
--Video
-实验环境安装配置
--Video
-网络相关命令
--Video
--Video
-本周作业
--外部链接
-编译、构建和调试
--Video
--Video
--Video
-Socket接口
--Video
--Video
-UDP范例代码
--Video
-TCP范例代码
--Video
-本周作业
--外部链接
-TCP协议概述
--Video
--Video
-Linux网络协议栈源代码简介
--Video
-Linux系统的编译、构建和调试
--Video
--Video
-TCP协议源代码分析
--Video
-本周作业
--外部链接
-IP协议基础
--Video
-路由表
--Video
-路由转发举例
--Video
-IP协议栈源代码解析
--Video
-路由协议简介
--Video
-网络层数据传输路径解析
--Video
-本周作业
--外部链接
-ARP协议基础
--Video
-ARP解析的过程
--Video
-ARP解析在网络传输过程中的作用
--Video
-ARP协议栈源代码解析
--Video
-本周作业
--外部链接
-以太网基础
--Video
--Video
-交换机的学习、转发和过滤数据库
--Video
-常见二层协议
--Video
-数据链路层在Linux网络协议栈中的一些关键代码分析
--Video
-本周作业
--外部链接
-DNS协议基础
--Video
-DNS域名的存储
--Video
-DNS域名解析过程分析
--Video
-本周作业
--外部链接
-互联网架构设计的最初动机与核心目标
--Video
-互联网架构设计的具体目标及背后重要权衡
--Video
--Video
--Video
-课程考核
--外部链接