OSI 7계층중 4번째 계층에 속하는 전송계층에 대해서 정리해보겠습니다.
네트워크 양 끝단에서 논리적인 선로로 데이터를 주고받는 기능을 제공하는 계층
기능 : 3계층인 네트워크 계층에서 데이터를 보내지만 그 데이터가 잘 가고 있는지 흐름 제어
수신 데이터가 깨지거나 분실되는지 오류 제어
너무 크면 쪼개서 보내기도 하고 분할과 병합
, 즉 데이터 전송을 제어한다.
TCP란 ? IP프로토콜 위에서 연결형 서비스르 지원하는 전송 계층 프로토콜이다. 주요기능으로는
TCP는 데이터를 Segment
라는 단위로 전송하고 이 segment는 Header에 Data가 붙어있는 구조이다.
Source Port/Destination Port
: 전송 계층의 설명에서 양끝단이라고한 송수신 프로세스의 할당된 포트주소를 적어 놓는다 Sequence Number
: 송신 프로세스가 지정하는 순서 번호Acknowledgement Number
: 수신 프로세스가 제대로 수신한 바이트의 수를 응답한다URG 부터 FIN 까진데 0과 1로 상태를 구분한다. -> 플래그를 세운다고 표현
3 way handshake에 쓰이는 중요한 세가지
ACK
: 확인했으면 1 아니면 0SYN
: 연결하고싶으면 1 아니면 0FIN
: 종료하고싶으면 1 아니면 0Full Duplex 방식을 지원하므로 동시에 전송데이터와 응답데이터를 함께 전송한다(비기배킹) TCP 에서
데이터를 전송하려면 1. 연결설정 2. 데이터 전송 3. 연결 해제를 해야한다.
1-1. 첫번째로 A프로세스가 sequence number
에 10을 담고 SYN 플래그
를 지정한 세그먼트를 전송해서 연결 설정을 요구 한다.
1-2. 1-1을 받은 B프로세스는 연결을 수락하려면 긍정 응답인 ACK 플래그
를 지정한 세그먼트와 임의의 순서번호 50 그리고 1-1에서 받았던 sequence number
에 1을 더한 11을 acknowlegement number
에 담아 회신한다.
1-3. 1-2를 받은 A프로세스는 B프로세스가 전송한 연결 수락 세그먼트가 제대로 도착했음을 알리기위해 ACK 플래그
를 지정한 세그먼트를 보낸다 ackknowlegement number = 받은 sequence number +1
window
필드를 사용한다. 만약 1-3에 데이터를 같이 실어나른다고 하면 1-2 에서 B프로세스는 받을수 있는 window 사이즈를 정해서 A 프로세스의 전송속도를 제어한다. window
필드에 300을 지정했으면 a프로세스는 299 번까지의 데이터를 연속으로 전송할수있다.세그먼트는 sequence number
와 같이 전송되는데 이 숫자는 상위 계층에서 보낸 데이터의 바이트 수
에 기초하여 부여된다 그리고
sequence number가 똑같은게 하나 더왔다 -> 중복된 데이터니까 버림
중간에 빈 sequence number가 있다. -> 데이터를 분실했다고 판단.
2-1. A프로세스가 전송한 31~40번 데이터가 오다 사라짐
2-2. B프로세스는 30번까지 받았으니까 acknowlegenumber에 31번을 부여해서 넘겨줌
2-3. A프로세스는 정해진 세션시간동안 31~40번 데이터에 대한 ACK플래그 세그먼트를 받지 못했으니 31~40번을 재전송
3-1. FIN 플래그를 세워서 이 통신을 마치고 싶다는걸 알린다 -> A프로세스 FIN_WAIT 상태
3-2. A프로세스 ACK 수신 -> A 프로세스 FIN_WAITE 상태, B프로세스 CLOSE_WAIT 상태
3-3. FIN은 보냈지만 FIN플래그 응답을 못받아서 3-2에 대한 ACK 응답을 보낸다 -> A 프로세스 FIN_WAIT 상태, B프로세스 CLOSE_WAIT 상태
3-4. B프로세스도 FIN 플래그 응답을 통해 완전히 종료 하고싶다는걸 알린다. -> A 프로세스 FIN_WAIT 상태, B프로세스 LAST_ACK 상태
3-5. B프로세스의 FIN 응답을 받았다는 ACK 응답을 보낸다. -> A 프로세스 TIME WAIT 상태, B프로세스 CLOSED
3-6. TIME WAIT 상태에 있는 A 프로세스는 혹시모를 도착 안한 세그먼트를 기다리다가 완전히 닫는다.
왜 신뢰성이 높은지 알것같다,,