实现的时候是底层的数据包封装上层的包,然后向下层传送,所以实际系统是IP包包含了TCP的内容的。发送数据的时候的过程是app程序使用tcp的端口向ip层发送tcp的数据,ip层收到后加上ip header继续向下层发送,一直到物理层的端口上,比如我们用的水晶头,发送到对端去,对端收到后执行反方向的操作一直到app层中解出原始的数据来使用。
当接收到来自TCP的数据后,如果再IP层或TCP层数据校验失败的话,会不会把数据传递给应用层,还是直接将数据扔掉?
是的,tcp层可以做循环冗余校验的,如果发现错误就不会上传app层(应用层),而是通过回nack等信息进行封装并发到ip层一直发到对端的tcp层,对端tcp层就知道这个数据包对方没收到,或者收到的有问题了,那么就会重发的。