TCP 스트리밍의 세그먼트, 세그먼트 정보
9448 단어 TCP
TCP 스트리밍의 세그먼트, 세그먼트 정보
TCP를 배울 때 TCP는 유형으로 해석된다.
쉽게 연상되는 UDP에서 UDP는 데이터 보고서를 처리하는 프로토콜이다.데이터 보고서는 말 그대로 데이터로 하나의 데이터를 발송할 때 하나의 UDP를 생성하여 그룹을 나누어 발송한다.(MSS 범위)
참조 소스: https://www.techscore.com/tech/Java/JavaSE/Network/4/
다른 한편, TCP에서는 휴면 핸드폰에 연결을 붙여 넣은 후 연결이 끊기기 전에 흐르는 전송을 하는 데이터 교환 행위를 한다.
덧붙여 말하자면 플러그인 통신에서 수신측recv가 송신측send의 데이터를 보낸 경우send가 여러 번이라도recv는 한데 모인다.(상반되는 경우도 있다) 유형의 성질은'send와recv가 1대1이 되는 것을 보장하지 않는다'는 것이다.
의문
TCP 프로토콜의 데이터 중단을 규정하는 이유는 무엇입니까?그러니까
예를 들어 TCP를 통해'안녕하세요'라는 단어를 보낼 때 수신자는'안녕하세요'를 받아도 문자를 계속 사용할지 여부를 판단할 수 없다.
그럼 어디선가 "안녕하세요(마지막이네요)"라는 메시지를 보낸 건 아닐까요?아니면 TCP 흐름의 세그먼트를 다른 방법으로 나타낼까요?제가 조사하고 싶은 내용입니다.
조사 결과
TCP에서 이루어지는 것이 아니라 고급 프로토콜이나 응용을 통해 이루어진다.
방법으로는 다음과 같은 수단을 고려할 수 있다.
socket 통신의 경우(L4)
다음 코드를 써 보세요.
이 예에서 응용 프로그램이 제어하는 방법을 써 보아라.
※ recv 반환치, 해당 데이터가 큰 시간 종료되지 않음
client.py
import socket
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.connect(('127.0.0.1', 50001))
data = 'a' * 1024 * 1024 * 5 + 'bbb'
server.send(data)
server.pyimport socket
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('127.0.0.1', 50001))
print('Server listen')
server.listen(1)
(connection, client) = server.accept()
while True:
try:
print('Client connected', client)
data = connection.recv(1024)
if not data:
print "break"
break
print(data)
except socket.error:
connection.close()
break
실행하면 서버야.py 출력은 다음과 같습니다.('Client connected', ('127.0.0.1', 63949))
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
('Client connected', ('127.0.0.1', 63949))
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
('Client connected', ('127.0.0.1', 63949))
bbb
('Client connected', ('127.0.0.1', 63949))
break
recv 시 1024byte 단위로 분할 수신data = connection.recv(1024)
하기 때문에 이런 형식이 형성되었다.그러나 위리싱크에서 조를 나누는 것을 보고 마치 ~aaabb가 된 것처럼 TCP 흐름으로 붙어 비행한다.socket의recv는 지정한 1024byte에 따라 분할된다는 것을 잘 알고 있습니다.
그럼 캡처를 다시 한 번 살펴보면 이런 형식으로 50001 listen 서버에서 TCP 통신이 발생했습니다.
Length를 주목해보면 16388이 연속된 후 7467가 발생한다.이렇게 되면 이 화면을 보면 Length가 축소되었다는 것을 알 수 있다. 데이터는 쉽게 끝난다.
프로그램으로 표현하면 이게 여기야.
if not data:
print "break"
break
1024byte가 TCP 흐름에서 얻은 데이터의 마지막 0byte를 Recv로 분할하면 돌아오기 때문에 데이터의 절구를 판단할 수 있습니다.주의 사항
이 방법을 사용할 때, 예를 들어 데이터 통신이 끊겼을 때 데이터=0도 성립되고, 그 순간의 데이터의 엉덩이도 끊어진다.
알 수 없는 점
참고 자료
Reference
이 문제에 관하여(TCP 스트리밍의 세그먼트, 세그먼트 정보), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Gin/items/620f4a7bec246004ee89텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)