◆TCP소켓 버퍼◆
tcp소켓 각각은 버퍼를 가지고 있다.
read/write할때 각각의 버퍼를 사용하는데
write할때 일단 내 버퍼에 데이터를 저장 하고
상대방 소켓에 버퍼가 비었는지 확인 후
비었으면 상대방소켓버퍼로 전송한다.
버퍼가 차있으면 순서데로 버퍼에서 꺼내 read하고
버퍼가 비면 상대방으로부터 온 데이터를 버퍼에 쌓는과정을
슬라이드윈도우라고 한다.
◆TCP동작원리◆
tcp는 데이터손실을 막는것이 매우 중요하다.
따라서 서버와 클라이언트간의 약속이 필요하고
연결, 데이터송수신, 연결종료로 나누어 약속하고 그에 맞게 통신을 주고받는다.
tcp동작원리1(연결)
1.클라이언트가 던지고
2.서버는 잘받았다고 대답하고
3.다시 클라이언트도 나도 잘받았다고 대답한다.
이과정을 쓰리웨이 핸드쉐이킹이라고한다.
예)
1.호스트A가 SEQ(1000)를 호스트B로 보낸다.
2.호스트B는 ACK(1001)로 호스트A의 SEQ에 대답해주고
SEQ(2000)를 보낸다
3.호스트A는 ACK(2001)로 호스트B의 SEQ에 대답해주고
SEQ(1001)를 보낸다.
tcp동작원리2(데이터송수신)
1.호스트A가 SEQ전송
2.호스트B가 ACK전송->ACK = SEQ + 전송된바이트 크기 +1
1.호스트A가 호스트B로부터 전송받은 SEQ전송
2.호스트B가 ACK전송->ACK = SEQ + 전송된바이트 크기 +1
예)
1.호스트A가 SEQ(1000)를 100바이트만큼 호스트B로 보낸다.
2.호스트B는 ACK(1101)로 호스트A의 SEQ에 대답해준다
1.호스트A가 SEQ(1101)를 100바이트만큼 호스트B로 보낸다.
2.호스트B는 ACK(1202)로 호스트A의 SEQ에 대답해준다
tcp동작원리3(연결종료)
1. 호스트A가 연결을 끊고자 FIN 과 SEQ전송
2. 호스트B가 SEQ와 ACK 전송
3. 호스트B가 연결을 끊고자 FIN 과 SEQ와 ACK전송
4. 호스트A가 SEQ와 ACK 전송
예)
1.호스트A가 FIN 과 SEQ(5000)를 전송
2.호스트B가 SEQ(7500)와 ACK(5001)전송
3.호스트B가 연결을 끊고자 FIN 과 SEQ(7501)와 ACK(5001)전송
4.호스트A가 SEQ(5001)와 ACK(7502) 전송
'프로그래밍' 카테고리의 다른 글
1. mysql [show / use / select / create / drop] (0) | 2018.04.06 |
---|---|
6_UDP 이론 (0) | 2018.01.09 |
4_listen,accept,connect,iterative서버 (0) | 2018.01.08 |
3_bin함수 (0) | 2017.12.29 |
2_socket 함수인자 (0) | 2017.12.18 |
댓글